【问题标题】:Understanding routing in ASP.NET MVC了解 ASP.NET MVC 中的路由
【发布时间】:2011-06-26 16:02:31
【问题描述】:

我正在努力思考 ASP.NET MVC 实现路由的方式。

从我目前的理解来看,我的路由字符串似乎有很多“{controller}”和“{action}”,否则它不起作用?

如何定义使用SearchControllerSearch 操作同时采用SearchKeywordsSearchCaseSensitive 参数具有以下URL 的路由?

domain/SearchKeywords/CaseSensitive

更简单的是,如何将domain 映射到控制器SearchControllerSearch

【问题讨论】:

    标签: c# asp.net asp.net-mvc routing asp.net-mvc-3


    【解决方案1】:

    根据我目前的理解, 看来我的路线字符串有很多 “{controller}”和“{action}”, 不然不行?

    控制器和操作标记的值是必需的。您有 2 个选项来提供值:

    1) 在 URL 模板上使用 {controller} 和 {action} 标记。例如:

    routes.MapRoute(null, "{controller}/{action}");
    

    2) 使用控制器和动作的默认值。例如:

    routes.MapRoute(null, "some-url",
       new { controller = "Search", action = "Search" }
    );
    

    我将如何定义路线 使用 SearchController 和 Search 同时采取 SearchKeywords 和 SearchCaseSensitive 参数有 以下网址?

    域/SearchKeywords/CaseSensitive

    路由系统不考虑 URL 主机(或域),只考虑应用程序的相对路径。你可以这样做:

    routes.MapRoute(null, "{SearchKeywords}/{CaseSensitive}",
       new { controller = "Search", action = "Search" }
    );
    

    您还可以为 SearchKeywords 和 CaseSensitive 提供默认值,如果您想让它们中的任何一个成为可选的。

    【讨论】:

      【解决方案2】:

      您可以将controller = "Search", action = "Search" 添加到defaults(最后一个参数)。

      路由引擎将使用 defaults 中的值来填充 URL 中没有的参数。

      【讨论】:

      • 但是问题是如果我想添加更多的路由规则,这个会“吃掉”它们。还是不行?
      • 另外,它如何解释域/Abc?它会认为 Abc 是控制器,而我希望它是要搜索的字符串!
      【解决方案3】:

      如果你想在你的路由中有一个“域”参数,你必须把它放在路由注册的顶部。第二个匿名对象中的 'domain' 参数是一个约束,这里设置为一个正则表达式,用于测试该域是可能的域“DefaultDomain”还是“OtherDomain”。

              routes.MapRoute("DomainRoute", "{domain}/{controller}/{action}",
                              new {domain = "DefaultDomain", controller = "Search", action = "Search"},
                              new {domain = "DefaultDomain|OtherDomain"});
      

      【讨论】:

      • 域不是参数,它是您网站的域
      • 路由不考虑域
      • 运行域/myargs 不会调用 SearchController.Search(myargs)
      猜你喜欢
      • 1970-01-01
      • 2015-04-06
      • 2014-12-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-28
      • 2015-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多