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

发布于 2024-10-10 02:58:19 字数 335 浏览 2 评论 0原文

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

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

/Item/item-unique-string-name/Detail

我希望在一些高级别的全局处理这个问题 - 例如在路由评估之前加载数字 ID 和在路线数据中“替换”它。但我不确定这样的黑客攻击的正确位置是什么 - 自定义 MvcHandler、自定义 IRouteHandler 还是其他地方?对此有什么想法吗? :)

i have quite big ASP.NET MVC 2 application (multiple areas, each with own routing registration) using routes like this :

/Item/12345/Detail - where 12345 is the ID of the item. The whole application just rely on that numeric IDs. But now there is an requirement (seo stuff) to make URLs look like this :

/Item/item-unique-string-name/Detail

I would love to handle this globally in some high level - for example load numeric ID before route evaluation and "replace" it in route data. But i am not sure what is the right spot for such a hack - custom MvcHandler, custom IRouteHandler, somewhere else ? any ideas about this ? :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一生独一 2024-10-17 02:58:19

嘿嘿,最后我自己想通了
我所要做的就是像这样重写 BaseController 的执行方法:

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

所以毕竟不需要对路由进行黑客攻击:)

Hey, i figured it out by myself eventually,
all i had to do was override execute method of my BaseController like this :

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

So no hacking of routing needed after all :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文