ASP.NET MVC Routing - 无限变量树

时间:2013-04-22 19:47:33

标签: asp.net-mvc asp.net-mvc-3

我的链接看起来像这样:

https://myhost.com/Forums/Category/
https://myhost.com/Forums/SubCategory/
https://myhost.com/Forums/SubSubCategory/

现在这条路线配置正在捕捉上述路线:

context.MapRoute(
    "Forums_category",
    "Forums/{category}",
    new { controller = "Forums", action = "ThreadList" }
);

这就是我想要使用的内容:

https://myhost.com/Forums/Category/SubCategory/SubSubCategory

我希望它能够被抓住:

context.MapRoute(
    "Forums_category",
    "Forums/{THIS_IS_IGNORED}/{category}",
    new { controller = "Forums", action = "ThreadList" }
);

所以,基本上我希望它只捕获链接中的最后一个变量。这可能吗?

1 个答案:

答案 0 :(得分:3)

使用通配符(又名“catch all”)参数(以*字符为前缀):

context.MapRoute(
    "Forums_category",
    "Forums/{*category}",
    new { controller = "Forums", action = "ThreadList" }
);

这将导致所有剩余的路径段(包括斜杠)存储在category

如果您只对最后一个段感兴趣,可以搜索最后一个斜杠字符,如果找到,则删除前一个部分。你可能不喜欢考虑拖尾斜线,所以先修剪它们。

这样的事情会起作用:

category = category.TrimEnd('/');

int lastSlash = category.LastIndexOf('/');
if (lastSlash >= 0)
{
    category = category.Substring(lastSlash + 1);
}