ASP.NET MVC - 全局添加/重写路由数据

时间:2011-01-03 13:11:20

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

我有相当大的ASP.NET MVC 2应用程序(多个区域,每个都有自己的路由注册),使用这样的路由:

/ Item / 12345 / Detail - 其中12345是项目的ID。整个应用程序只依赖于数字ID。但现在有一个要求(seo stuff)使URL看起来像这样:

/项目/项目唯一字符串名称/详情

我希望在某些高级别上全局处理 - 例如在路由评估之前加载数字ID并在路由数据中“替换”它。但我不确定这样一个黑客的正确位置 - 自定义MvcHandler,自定义IRouteHandler,在其他地方?关于这个的任何想法? :)

1 个答案:

答案 0 :(得分:3)

嘿,我最终自己想通了, 我所要做的就是覆盖我的BaseController的execute方法,如下所示:

protected override void Execute(System.Web.Routing.RequestContext requestContext)
    {
        if (requestContext.RouteData.Values["seo"] != null && requestContext.RouteData.Values["id"] == null)
        {
            // retrieve Id from Seo here (i use cache for that)

            if (Id != null)
            {
                requestContext.RouteData.Values.Add("Id", (long)Id);
            }
            else
            {
                requestContext.RouteData.Values.Add("Id", 0);
            }
        }

        base.Execute(requestContext);
    }

因此,毕竟不需要黑客路由:)