开发人员通常会遵循哪种特定模式?在我的Web应用程序中,我从未真正考虑过它,但ASP.NET MVC路由引擎几乎迫使你至少考虑它。
到目前为止,我一直喜欢控制器/动作/索引结构(例如Products / Edit / 1),但我正在努力处理更复杂的网址。
例如,假设您有一个页面列出了用户在其帐户中拥有的所有产品。你会怎么做?在我的脑海中,我可以想到列表页面和编辑页面的以下可能性:
我确信还有很多其他人我都错过了。有什么建议吗?
答案 0 :(得分:7)
我喜欢RESTful,用户友好且可浏览的网址。
这是什么意思?让我们从用户友好的URL 开始。对我而言,用户友好的URL易于输入且易于记忆/Default.aspx?action=show&userID=140
不符合任何这些要求。像`/ users / troethom'这样的网址似乎是合乎逻辑的。
这导致了下一点。 hackable URL 是一个用户可以修改并仍会显示结果的URL。如果网址具有黑客性且我的个人资料的网址为/users/troethom
,则可以安全删除我的用户名以获取用户列表(/users
)。
使用 RESTful URL 非常类似于我的其他建议背后的想法。您正在为用户而不是计算机设计URL,因此URL必须与内容相关,而不是与站点的技术后端相关。作为'/ users'的URL比'/ users / list'更有意义,URL作为'/ category / programming / javascript'(表示'编程'类别中的子类'javascript'优于'/ category / show / 12'。
省略ID确实比较困难,但在我的世界里,这是值得的。
另请参阅有关W3C常见HTTP实施问题的the Understanding URIs section。它在设计URI时有一个常见的陷阱列表。另一个好资源是Resourceful Vs Hackable Search URLs。
答案 1 :(得分:3)
您可能需要查看问题“Friendly url scheme?”。
特别是,Larry.Smithmier's answer提供了在ASP.NET中使用MVC时的常用URL方案列表。
答案 2 :(得分:1)
此外,您可以考虑使用不同的动词为不同的操作重用相同的路径。例如,对“Products / Edit / 45”的GET请求将显示产品编辑器,而对同一URL的POST将更新产品。您可以使用AcceptVerb属性来完成此任务:
[AcceptVerb("GET")]
public ActionResult Edit(int id)
{
ViewData["Product"] = _products.Get(id);
return View();
}
[AcceptVerb("POST")]
public ActionResult Edit(int id, string title, string description)
{
_products.Update(id, title, description);
TempData["Message"] = "Changes saved successfully!";
return RedirectToAction("Edit", new { id });
}
答案 3 :(得分:0)
BilldehÓra撰写了一篇非常好的文章,题为Web resource mapping criteria for frameworks,非常值得一读。
答案 4 :(得分:0)
要添加到troethom的注释,RESTful通常也意味着,例如,创建一个新用户,您将表示为/ users / newusername
RESTful基本上使用5种标准HTTP方法(GET,PUT,POST,DELETE,HEAD)来控制/访问内容。
好吧,这对于网络浏览器来说并不容易,但你总是可以使用重载的POST(发布到/ users / username以及用户的表示来更改某些细节等等。
这是一种很好的做事方式,我推荐阅读RESTFul Web services以便更好地理解:D(这是一本非常好的书!)
答案 5 :(得分:0)
我已经看到了两种主要接受这个主题的方法......
MvcContrib project documentation
中描述了一个而另一个在blog post by Stephen Walther中描述(我个人更喜欢)。