【问题标题】:How do you structure your URL routes?你如何构建你的 URL 路由?
【发布时间】:2010-09-12 06:41:30
【问题描述】:

是否有开发人员通常遵循的特定模式?我以前在我的 Web 应用程序中从来没有真正考虑过它,但是 ASP.NET MVC 路由引擎几乎迫使你至少考虑到它。

到目前为止,我喜欢控制器/操作/索引结构(例如 Products/Edit/1),但我在处理更复杂的 url。

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

  1. User/{user id}/Products/List, User/{user id}/Products/Edit/{product id}
  2. User/{user id}/Products, User/{user id}/Products/{product id}
  3. Products?UserID={user id}, Products/Edit/{product id}

我敢肯定还有很多我想念的。有什么建议吗?

【问题讨论】:

    标签: asp.net-mvc url routing


    【解决方案1】:

    我已经看到了两种主要的被接受的方式来处理这个话题......

    一个在MvcContrib project documentation中有描述

    另一个在blog post by Stephen Walther 中描述(我个人更喜欢)。

    【讨论】:

    【解决方案2】:

    要添加到 troethom 的 cmets,RESTful 通常还意味着,例如,要创建一个新用户,您可以将一个表示放入 /users/newusername

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

    好的,这对于网络浏览器来说并不容易,但您始终可以使用重载 POST(发布到 /users/username 并代表用户更改一些细节等。

    这是一种很好的做事方式,我建议阅读RESTFul Web services 以获得更好的理解:D(这是一本非常好的书!)

    【讨论】:

      【解决方案3】:

      我喜欢 RESTful、用户友好和可破解的 URL。

      这是什么意思?让我们从用户友好的 URL 开始。对我来说,用户友好的 URL 是易于键入且易于记忆的东西 /Default.aspx?action=show&userID=140 不符合这些要求中的任何一个。不过,像 `/users/troethom´ 这样的 URL 似乎是合乎逻辑的。

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

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

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

      还可以咨询the Understanding URIs section,了解 W3C 的常见 HTTP 实现问题。它列出了设计 URI 时的常见陷阱。另一个很好的资源是Resourceful Vs Hackable Search URLs。

      【讨论】:

        【解决方案4】:

        Bill de hÓra 写了一篇非常好的文章,题为@9​​87654321@,值得一读。

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

            您可能想看看问题“Friendly url scheme?”。

            特别是,Larry.Smithmier's answer 提供了在 ASP.NET 中使用 MVC 时常见的 URL 方案列表。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-01-10
              • 2012-08-21
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-10-15
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多