我知道当有一个表格的路线时
Alpha/Bravo/{Charlie}
和另一个表单
Alpha/Bravo/Delta/{Echo}
第一条路线将匹配两条路线的所有路线,因为Delta / {Echo}被接受为{Charlie}。虽然在组织路线时这可能是一种痛苦,但它也可以用于简化目的。我希望能够在路由字符串的中间使用此概念。我想做点像
Alpha/{Bravo}/Charlie
匹配表单
的网址Alpha/bravo/Charlie
和
Alpha/bravo/bravo2/Charlie
有办法做到这一点吗?
答案 0 :(得分:0)
使用正则表达式路由。类似以下内容可能会将{variant}
参数与1个或多个尾随数字匹配
routes.MapRoute(
"Title",
"Controller/something/{variant}/Action",
new { controller = "Controller", action = "Action" },
new { variant = @"something\d+" }
);
你的路线看起来有点奇怪(也许它缺少一些花括号),但我的回答描述了你如何在你的路线中使用正则表达式的许多参数。
使用您的确切路线,Controller / something / {variant} / Action(再次,这很奇怪),我的映射路线将捕获如下的请求:
/Controller/something/something123/Action
/Controller/something/something1/Action
但不是
/Controller/something/somethingelse/Action
/Controller/something/nothing/Action
如果{variant}
没有模式,那么我认为你不能使用正则表达式。否则,路由不是这样设计的。
如果您想要多个参数变量,请使用多个reqular表达式
routes.MapRoute(
"Title",
"Controller/{something}/{variant}/Action",
new { controller = "Controller", action = "Action" },
new { variant = @"something\d+", something = @"(something|somethinglese)" }
);
如果您需要{something}
是可选的,我不记得了,但您可能需要将其移至最后一个参数并将路线更改为:
routes.MapRoute(
"Title",
"Controller/{variant}/Action/{something}",
new { controller = "Controller", action = "Action", something = UrlParameter.Optional },
new { variant = @"something\d+", something = @"(something|somethinglese)" }
);
答案 1 :(得分:0)
我最后添加了第二条路线,所以现在我已经
了routes.MapRoute(
"Route1",
"Alpha/{Bravo}/{Charlie}/Delta",
new { controller = "Alpha", action = "Delta" }
);
routes.MapRoute(
"Route1",
"Alpha/{Bravo}/Delta",
new { controller = "Alpha", action = "Delta", Charlie = ""}
);
并在控制器中:
public ActionResult Delta(string Bravo, string Charlie)
{
Bravo += Charlie;
//everything else
}
现在一切顺利,虽然我希望有一条路线可以捕获这两种情况。