Kie*_*ron 9 asp.net-mvc asp.net-routing
我最近似乎遇到的一个主要障碍是了解我一直在开发的一些基于MVC的应用程序的一些更复杂的路由要求.我在找到正确的教程集时遇到问题,让我通过它来获得完整的理解.
我想要找到的是一套完整的教程,用于从基本(控制器/动作/ id)到高级的所有路由.
我称之为高级路由的一个例子是:
/blog/year/month/day/title-将映射到控制器:blog与行动:post和参数:year,month,day和title
/blog/title- 将映射到controller:blog和action:post并作为参数:title
/title- 将映射到controller:blog和action:post并作为参数:title
我可以使用数据库将每个可能的集合映射到全局中的显式路由,但这似乎正在使得路由引擎路由到正确的位置失败了.我宁愿定义规则一次.
Oma*_*mar 17
我不明白,为什么不能将它们中的每一个定义为单独的路径,在需要时使用正则表达式.例如,区分/blog/year/month/day/title和/blog/title.
这些集合中的每一个都是一个单独的案例,您需要告诉MVC如何处理每个集合.您可以defining the rule once在Global.asax.cs文件中执行此操作:
对于第一种情况: /blog/year/month/day/title
routes.MapRoute(
    "Blog Full Route", // Route name
    "blog/{year}/{month}/{day}/{title}", // URL with parameters
    new {controller = "blog", action = "post"},   // Defaults
    new {year = @"\d+", month= @"\d+", day = @"\d+"} // Constrain parameters with RegEx patterns
    );
对于第二种情况: /blog/title
routes.MapRoute(
    "Blog Title Route", // Route name
    "blog/{title}", // URL with parameters
    new {controller = "blog", action = "post"},   // Defaults
    );
最后一个案例: /title
routes.MapRoute(
    "Title Route", // Route name
    "{title}", // URL with parameters
    new {controller = "blog", action = "post"},   // Defaults
    );
诀窍是将这些路线按照这个确切的顺序排列,底部最不具体.更改顺序将导致使用错误的路由(特别是在最后两个中).如果使用第二种情况切换了最后一种情况,则该类型的URL blog/SomeTitle将作为标题路由到该post操作blog.
无论何时为某事创建路线,请记住以下几点:
very注意路线顺序(之前的路线){something}表示动作参数一些很好的教程:
| 归档时间: | 
 | 
| 查看次数: | 8576 次 | 
| 最近记录: |