【问题标题】:ASP.NET MVC Routing - Routing with optional parameters and friendly urlsASP.NET MVC 路由 - 带有可选参数和友好 url 的路由
【发布时间】:2012-10-29 18:24:57
【问题描述】:

我有一个搜索操作方法,此时它接受 5 个可选参数作为其搜索条件。 我的主页有一个快速搜索按钮,它向搜索操作方法提交 GET 请求。我已拥有一切 工作正常,但是我的网址是使用标准查询字符串语法 (?x=x&y=y) 生成的。

我想公开友好的 url,但我认为可能使用路由系统的唯一方法是 添加每个可能的排列,因为所有参数都是可选的,这听起来不太好 优雅。

那么还有其他路线(不是双关语:))我可以采取吗?可能是 Url 重写模块?

任何帮助将不胜感激。

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-mvc-routing


    【解决方案1】:

    选项 1:使用查询字符串。搜索页面上的友好 URL 没有什么了不起的。

    /search?q=url+routing
    

    选项 2:最多允许一个可选参数成为“友好”网址的一部分。任何附加参数都必须在查询字符串中传递。例如:

    /search/query/url+routing (1 parameter)
    /search/query/url+routing?tagged=asp.net (2 parameters)
    /search/query/url+routing?tagged=asp.net&sort=date (3 parameters)
    

    【讨论】:

      【解决方案2】:

      如果您对 http://mysite.com/search/{term-1}/{term-n}/{term-n+1} 之类的 url 没问题,您可以设置路由:

      routes.MapRoute(
          name: "SearchRoute",
          url: "search/{*terms}",
          defaults: new { controller = "MySearchController", action = "MySearchAction" }
      );
      

      在您的操作中,您将接收一个字符串,该字符串将以/ 与您的所有搜索词分隔。 (该 URL 可能没有多大意义,但您可以使用它。)

      public class SearchController : Controller
      {
          public ActionResult SearchAction (string terms)
          {
              foreach (var term in terms.Split ('/'))
              {
                  // Do something
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2011-04-06
        • 2013-09-03
        • 1970-01-01
        • 2010-09-11
        • 2011-04-08
        • 2013-05-07
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多