微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

asp.net-mvc – 如何在MVC选择路由之前添加路由参数

我正在尝试为现有的MVC 3应用程序添加对不同语言的支持.到目前为止,我的链接
oldUrl -> myapp.com/Item/Details/5/some-title

网站上有不同地方的网站链接.但是现在我想更改URL以便包含语言:

newUrl -> kmyapp.com/en/Item/Details/5/some-title

但是我希望oldUrl链接有效.问题是如何做到这一点…最简单的方法添加另一条路线,但我已经有太多它们而且它变得有点丑陋,当我从一个不创建的网页创建网址时有语言链接也没有语言所以我必须做其他事情.

另一种方法是覆盖在MVC尝试将请求映射到特定路由之前的某些东西,但是已经解析了请求URL并填充了routeValues字典.所以我可以检查语言,如果它没有包含在路由参数中,我可以自己添加它并调用父类的实现继续.那可能吗?我应该注意什么 – UrlRoutingModule,MvcHttpHandler或其他什么?我可以覆盖什么以及如何告诉MVC使用我的版本?

任何其他想法也将不胜感激!

解决方法

另一种方法是覆盖在MVC尝试将请求映射到特定路由之前的某些东西,我可以自己添加它并调用父类的实现继续.那可能吗?

Yes It is possible.

您可以覆盖其中包含URL详细信息的GetRouteData in RouteBase.

public override RouteData GetRouteData(HttpContextBase httpContext)
{
        string url = httpContext.Request.AppRelativeCurrentExecutionFilePath;
}

and in global.aspx add below code.

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.Add(new MyUrlRoute()); // Add before your default Routes

    routes.MapRoute(
        "Default",// Route name
        "{controller}/{action}/{id}",// URL with parameters
        new { controller = "Home",action = "Index",id = UrlParameter.Optional } // Parameter defaults
    );

For more detailed implementation – refer 07001

原文地址:https://www.jb51.cc/aspnet/247830.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐