我在Attribute Routing
申请中使用MVC4
。我已设置路线[Route("test-{testParam1}-{testParam2}")]
。这里`{testParam2}'可能包含“测试”一词。例如,如果我输入如下的网址,
localhost:33333/test-temp-test-tempparam2
这给了我404错误。在网址中,此处{testParam2}
有两个单词test tempparam2
,格式为test-tempparam2
。当test
字位于{testParam2}
的最后位置时,它运行良好。这意味着如果网址像.../test-temp-tempParam2-test
那样运行良好。但是下面给出错误。 .../test-temp-test-tempParam2
。
以下是可能有用的代码......
[Route ("test-{testParam1}-{testParam2}")]
public ActionResult Foo (int testParam2) {...}
现在尝试关注两个网址。
localhost:(port)/test-temp-1
localhost:(port)/test-test-temp-1
在我的情况下,第二个错误。在这种情况下,第一个参数的格式为test-temp
test temp
。首先运行良好。
如何解决这个问题?
答案 0 :(得分:2)
OP表示路径模板中的最后一个参数是int
使用路线约束。
路径约束允许您限制路径模板中的参数匹配方式。一般语法是{parameter:constraint}
。例如:
[Route ("test-{testParam1}-{testParam2:int}")]
public ActionResult Foo (int testParam2) {...}
因此,在尝试关注两个网址时。
localhost:(port)/test-temp-1
localhost:(port)/test-test-temp-1
第一个匹配路线数据{testParam1 = temp}-{testParam2 = 1}
第二个匹配路线数据{testParam1 = test-temp}-{testParam2 = 1}
答案 1 :(得分:0)
您在Global.asax文件中是否有以下代码?
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”);
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: “Default”,
url: “{controller}/{action}/{id}”,
defaults: new { controller = “Home”, action = “Index”, id = UrlParameter.Optional }
);
}