Mic*_*uda 2 c# asp.net-mvc url-routing asp.net-mvc-routing asp.net-mvc-5
我想保持我的网址尽可能短,所以我正在测试没有分隔符的路由,如下所示:
routes.MapRoute(
name: "Photo",
url: "x{id}",
defaults: new { controller = "Content", action = "Photo" }
);
Run Code Online (Sandbox Code Playgroud)
由于某种原因,上面的路线不起作用,我收到404错误:
无法找到该资源.
说明:HTTP 404.您要查找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用.
但是,当我为不同的字母更改x前缀时,例如g,它工作正常.
没有冲突的路线.我在这里想念的是什么?
编辑:
我再次看到这个问题,我观察到404可能只发生在id包含x,即路线喜欢/xa1B2或/xZ9y8完美无缺,但x12xG失败了.请问有什么想法吗?
每个MSDN:
您可以在分隔符之间定义多个占位符,但它们必须用常量值分隔.例如,{language} - {country}/{action}是有效的路由模式.但是,{language} {country}/{action}不是有效模式,因为占位符之间没有常量或分隔符.因此,路由无法确定将语言占位符的值与国家/地区占位符的值分开的位置.
正如您已经说过的那样,当您的id以a开头时,会发生错误x.这是因为它无法区分您的id值和您选择的常量之间的差异.
您可以使用一些选项来解决此问题:
x.x并用另一个字符开始第二个路由.第四个选项看起来像这样:
// Ids that don't contain x will use this route
routes.MapRoute(
name: "Photo_X",
url: "x{id}",
defaults: new { controller = "Content", action = "Photo" },
constraints: new { id = @"(?i)[^x]" }
);
// Ids that contain x will use this route instead
routes.MapRoute(
name: "Photo_Y",
url: "y{id}",
defaults: new { controller = "Content", action = "Photo" }
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
307 次 |
| 最近记录: |