开发人员通常会遵循哪种特定模式?在我的Web应用程序中,我从未真正考虑过它,但ASP.NET MVC路由引擎几乎迫使你至少考虑它。

到目前为止,我一直喜欢控制器/动作/索引结构(例如Products / Edit / 1),但我正在努力处理更复杂的网址。

例如,假设您有一个页面列出了用户在其帐户中拥有的所有产品。你会怎么做?在我的脑海中,我可以想到列表页面和编辑页面的以下可能性:

  1. 用户/ {用户ID} /产品/列表,用户/ {用户ID} /产品/编辑/ {产品ID}
  2. 用户/ {用户ID} /产品,用户/ {用户ID} /产品/ {产品ID}
  3. 产品?UserID = {用户ID},产品/编辑/ {产品ID}
  4. 我确信还有很多其他人我都错过了。有什么建议吗?

有帮助吗?

解决方案

我喜欢RESTful,用户友好且可浏览的网址。

这是什么意思?让我们从用户友好的URL 开始。对我而言,用户友好的URL易于键入且易于记忆 /Default.aspx?action=show&userID=140 不符合任何这些要求。像`/ users / troethom´这样的网址虽然看似合乎逻辑。

这导致了下一点。 hackable URL 是一个用户可以修改并仍会显示结果的URL。如果URL是可攻击的并且我的个人资料的URL是 / users / troethom ,则可以安全地删除我的用户名以获取用户列表( / users )。

使用 RESTful URL 非常类似于我的其他建议背后的想法。您正在为用户而不是计算机设计URL,因此URL必须与内容相关,而不是与站点的技术后端相关。一个URL为´ / users´比´ / users / list´更有意义。和一个URL为´ / category / programming / javascript´ (代表'编程'类别中的子类别'javascript'优于´ / category / show / 12´。

省略ID确实比较困难,但在我的世界里,这是值得的。

另请参阅有关W3C&#180的常见HTTP实施的了解URI部分问题。它在设计URI时有一个常见的陷阱列表。另一个很好的资源是 Resourceful Vs Hackable Search URL

其他提示

您可能需要查看问题“友好网址方案?”。

特别是, Larry.Smithmier的回答提供了使用MVC时的常见URL方案列表ASP.NET。

此外,您可以考虑使用不同的动词为不同的操作重用相同的路径。例如,对“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 });
}

Bill de hÓ ra撰写了一篇非常好的文章,名为网络资源框架的映射标准非常值得一读。

要添加到troethom的注释,RESTful通常也意味着,例如,创建一个新用户,您将表示为/ users / newusername

RESTful基本上使用5种标准HTTP方法(GET,PUT,POST,DELETE,HEAD)来控制/访问内容。

好吧,对于网络浏览器来说这并不容易,但你总是可以使用重载的POST(发布到/ users / username以及用户的表示来更改某些细节等等。

这是一种很好的做事方式,我推荐阅读 RESTFul Web服务为了更好地理解:D(这是一本很好的书!)

我已经看到了两种主要接受这个主题的方法......

MvcContrib项目文档

另一个在斯蒂芬·沃尔特的博客文章(我个人更喜欢)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top