Asp.net mvc 2 跨网络匹配ASP.NET MVC路由/

Asp.net mvc 2 跨网络匹配ASP.NET MVC路由/,asp.net-mvc-2,routing,Asp.net Mvc 2,Routing,我知道,当有一个路线的形式 Alpha/Bravo/{Charlie} Alpha/Bravo/Delta/{Echo} 还有另一种形式 Alpha/Bravo/{Charlie} Alpha/Bravo/Delta/{Echo} 第一条路由将匹配两条路由的所有内容,因为Delta/{Echo}被接受为{Charlie}。虽然在组织路线时这可能会很痛苦,但为了简单起见,它也很有用。我希望能够在路由字符串的中间使用这个概念。我想做点像 Alpha/{Bravo}/Charlie 匹配表单

我知道,当有一个路线的形式

Alpha/Bravo/{Charlie}
Alpha/Bravo/Delta/{Echo}
还有另一种形式

Alpha/Bravo/{Charlie}
Alpha/Bravo/Delta/{Echo}
第一条路由将匹配两条路由的所有内容,因为Delta/{Echo}被接受为{Charlie}。虽然在组织路线时这可能会很痛苦,但为了简单起见,它也很有用。我希望能够在路由字符串的中间使用这个概念。我想做点像

Alpha/{Bravo}/Charlie
匹配表单的URL

Alpha/bravo/Charlie


有办法做到这一点吗?

使用正则表达式路由。类似于以下内容的内容可以将
{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)" }
);

我最后添加了第二条路线,所以现在

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
}

现在一切都解决了,尽管我希望有一条路线同时捕获两种情况。

问题是参数=“something”+vairant不起作用。因为variant实际上并没有声明在任何地方存在,所以它不存在,所以不能被添加。我需要做的是抓取那里的实际文本并将其附加到“某物”中。我编辑了我的答案。如果您只是修改一个参数,为什么不在action方法中进行修改呢?我更希望action方法只接受一个参数并完成它的工作,这已经非常简单并且编码很好了。我想先处理这个参数。用更多的信息编辑这个问题。我认为这可能使它变得更简单…?@Jim
{variant]
的可能值是什么?