2

我的链接看起来像这样:

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" }
);

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

4

1 回答 1

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);
}
于 2013-04-22T19:50:49.483 回答