Asp.net mvc Aspnet贪婪路由参数

Asp.net mvc Aspnet贪婪路由参数,asp.net-mvc,asp.net-core,asp.net-core-mvc,asp.net-routing,Asp.net Mvc,Asp.net Core,Asp.net Core Mvc,Asp.net Routing,我已绘制路线图: routes.MapRoute(“test”、“/{p1:int}-{p2}”、新的{controller=“test”、action=“int”}) 这样的路由应该匹配int字符串,比如/1-stuff,它适用于这种情况,但不适用于/1-stuff-stuff。我猜这是因为路由匹配,然后由于int约束而拒绝参数 如果我删除约束p1等于1-stuff,并且p2等于stuff。是否有方法以正确的方式应用约束或将p2标记为“贪婪”(但不是一网打尽),因此p1equals1和p2eq

我已绘制路线图:

routes.MapRoute(“test”、“/{p1:int}-{p2}”、新的{controller=“test”、action=“int”})

这样的路由应该匹配int字符串,比如
/1-stuff
,它适用于这种情况,但不适用于
/1-stuff-stuff
。我猜这是因为路由匹配,然后由于int约束而拒绝参数

如果我删除约束
p1
等于
1-stuff
,并且
p2
等于
stuff
。是否有方法以正确的方式应用约束或将p2标记为“贪婪”(但不是一网打尽),因此
p1
equals
1
p2
equals
stuff

这对于创建人性化的firendly URL非常重要,其中ID位于前面,所有内容都是烤肉串大小写,没有附加字符


全包不适用于我,我需要p2绑定到动作参数。正则表达式没有帮助。

为什么不试试像

Routes.MapRoute(
    name: "test",
    url: "/{p1}",
    defaults: new { controller = "test", action = "int" },
    constraints: new { p1 = "^\d+-[\w-]*\.*$" }
);
。。。然后在动作中解析p1


正则表达式可能需要根据您的需求进行一些调整,但是在这个场景中p1将是“1-stuff-stuff”,然后您可以
split(“-”)
p1使用slug获得值,就像通常建议使用以下模式
/{id:int}/{*slug?}
类似于StackOverflow如何处理他们的URL
/questions/50448520/aspnet贪婪路由参数
最近给出了类似场景的答案我声明我不想捕获所有参数。我需要像
/{id:int}-{greedy text param}/{other greedy text param}
这样的路由,也不能将catch all放在中间(在其他参数之前)。您还可以排除catch all
/{id:int}/{slug?}
。当前模板的问题是路线表不知道要走哪条短跑。包括附加到slug的id将导致解析和匹配问题。您可能还可以考虑使用
regex
约束来匹配所需的模式。只是一个想法。