我需要有以下 C# MVC 调用,例如:
/SomeController/ActionOne/1/2/3
/SomeController/ActionTwo/1/2/astring
这是我的路线图:
routes.MapRoute (
name: "One",
url: "SomeController/{action}/{intId1}/{intId2}/{intId3}",
defaults: new { controller = "SomeController", action = "ActionOne" }
);
routes.MapRoute (
name: "Two",
url: "SomeController/{action}/{intId1}/{intId2}/{string1}",
defaults: new { controller = "SomeController", action = "ActionTwo" }
);
Controller 看起来像这样:
public ActionResult ActionOne ( int intId1, int intId2, int intId3 )
{ ... }
public ActionResult ActionTwo ( int intId1, int intId2, string string1 )
{ ... }
当我使用 URL/SomeController/ActionTwo/1/2/astring 时,这会产生
我想避免仅仅为了绕过路由规则而传递未使用的参数,例如/SomeController/ActionTwo/1/2//astring:
public ActionResult ActionOne ( int intId1, int intId2, int? intId3, string? string1 )
{ ... }
public ActionResult ActionTwo ( int intId1, int intId2, int? intId3, string? string1 )
{ ... }
最佳答案
我没有测试它,但你可以在你的 Action 的 Route
属性上使用约束。例如使用您的路由 url:[Route("SomeController/{action}/{intId1}/{intId2}/{intId3:int}]
(使用 Route
属性,您也可以修改路由 url,从根本上解决您的问题,而无需担心约束)
在 this page 上你可以找到更多(它是关于 Web Api,但路由过程应该是相同的)。
实际上,还有另一种方法可以对路由 url 设置约束: constraints
中的 MapRoute
键。
routes.MapRoute(
name: "One",
url: "SomeController/{action}/{intId1}/{intId2}/{intId3}",
defaults: new { controller = "SomeController", action = "ActionOne" }
constraints: new{intId3=@"\d+"}
);
您也可以使用正则表达式。
关于c# - 两个具有不同数据类型的 MapRoute,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45925967/