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

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....