我的链接看起来像这样:
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" }
);
所以,基本上我希望它只捕获链接中的最后一个变量。这可能吗?
最佳答案
使用通配符(又名“catch all”)参数(以 *
字符作为前缀):
context.MapRoute(
"Forums_category",
"Forums/{*category}",
new { controller = "Forums", action = "ThreadList" }
);
这将导致所有剩余的路径段(包括斜杠)存储在类别
中。
如果您只对最后一段感兴趣,您可以搜索最后一个斜杠字符,如果找到,则删除前面的部分。您可能不喜欢考虑尾部斜杠,因此首先修剪它们。
像这样的东西会起作用:
category = category.TrimEnd('/');
int lastSlash = category.LastIndexOf('/');
if (lastSlash >= 0)
{
category = category.Substring(lastSlash + 1);
}
关于asp.net-mvc - ASP.NET MVC 路由 - 无限变量树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16155475/