Tim*_*ung 3 asp.net asp.net-mvc routes
我有一条如下的路线,理想情况下我希望它匹配:
domain.com/layout/1-slug-is-the-name-of-the-page
routes.MapRoute(
"Layout", // Route name
"layout/{id}-{slug}", // URL with parameters
new { controller = "Home", action = "Index"}, new {id = @"\d+$"}
);
Run Code Online (Sandbox Code Playgroud)
但是当我点击网址时,我会继续获得此异常:
参数字典包含非可空类型'System.Int32'的参数'id'的空条目,用于方法'System.Web.Mvc.ActionResult Index(Int32)'....
以上路线将匹配以下内容:
domain.com/layout/1-slug或domain.com/layout/1-slug_permalink
似乎将ID与Slug分开的连字符导致问题.
作为处理的第一步,路由模块执行传入URL与声明的路由的模式匹配.这种模式匹配非常渴望(因此id将所有连字符都连到最后一个,这标志着slug参数的开始).约束(如"\ d +")在模式匹配后运行.那么绊倒的是,急切的模式匹配是将id设置为无效值,然后它使约束失败,这导致整个路由不匹配,因此管道继续尝试将传入请求与下一个路由匹配集合.
解决此问题的最佳方法(例如最容易理解,非欺骗)方法是将整个段作为idAndSlug参数进行匹配,然后在控制器中使用正确的正则表达式将此字符串拆分为其id和slug成分.
或者,考虑使用斜杠,如mxmissile所示.
| 归档时间: |
|
| 查看次数: |
1173 次 |
| 最近记录: |