asp.net-mvc - ASP.NET MVC 路由 - 无限变量树

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

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

最佳答案

使用通配符(又名“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/

相关文章:

c# - 如何使用文件流保存位图

asp.net-mvc - MVC/Razor - Intellisense 弹出窗口在有以下括号时关闭

asp.net - 在布局中添加 PartialView

asp.net-mvc - 请求来自 iframe 吗?

javascript - 如何调用后操作响应,将选定的下拉项作为参数从 View 中的 javascript 传递

c# - 使用 HttpPost 将 IEnumerable 或列表模型传递给 Controller

asp.net-mvc-3 - 如何停止在 ASP.NET MVC 3 beta 1 中编码字符串?

css - ASP.NET MVC Html.ActionLink 超链接颜色

c# - 当对象从另一个类返回时无法保存 Entity Framework 中的更改

asp.net-mvc - : Index was out of range. 必须为非负数且小于集合的大小。参数名称:索引