You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将ASP.NET MVC的MvcRouteHandler适配到ASP.NET Core MVC?

在ASP.NET Core中集成自定义IRouter实现的CulturalRouteHandler

下面是两种直接可行的集成方式,帮你把自定义的CulturalRouteHandler关联到指定的文化路由:

方法1:直接在端点路由中指定自定义Handler

在Program.cs的端点配置里,直接给目标路由指定你的IRouter实例即可。这种方式最直接,适合大多数场景。

var builder = WebApplication.CreateBuilder(args);

// 注册MVC服务和你的自定义Handler(如果有依赖注入需求)
builder.Services.AddControllersWithViews();
builder.Services.AddScoped<CulturalRouteHandler>(); // 根据实际生命周期调整

var app = builder.Build();

// 常规中间件配置
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
    // 从服务容器获取自定义Handler实例
    var culturalHandler = endpoints.ServiceProvider.GetRequiredService<CulturalRouteHandler>();

    // 映射带文化参数的路由,并关联自定义Handler
    endpoints.MapRoute(
        name: "culture",
        template: "{culture:regex(^[a-z]{2}-[A-Z]{2}$)}/{controller}/{action}/{id?}",
        defaults: new { controller = "Home", action = "Index" },
        constraints: new { culture = new CultureRouteConstraint() }, // 可选,验证文化格式
        router: culturalHandler
    );

    // 保留默认路由
    endpoints.MapControllerRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}"
    );
});

app.Run();

方法2:用RouteBuilder构建自定义路由集合

如果需要更灵活的路由组合(比如批量添加多个关联该Handler的路由),可以用RouteBuilder来构建路由,再添加到端点。

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllersWithViews();
builder.Services.AddScoped<CulturalRouteHandler>();

var app = builder.Build();

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
    var routeBuilder = new RouteBuilder(endpoints);
    var culturalHandler = endpoints.ServiceProvider.GetRequiredService<CulturalRouteHandler>();

    // 添加文化路由并绑定Handler
    routeBuilder.MapRoute(
        name: "culture",
        template: "{culture:regex(^[a-z]{2}-[A-Z]{2}$)}/{controller}/{action}/{id?}",
        handler: culturalHandler
    );

    // 构建路由并添加到端点
    var customRoutes = routeBuilder.Build();
    endpoints.Map(customRoutes);

    // 默认路由
    endpoints.MapControllerRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}"
    );
});

app.Run();

重要注意事项

  • 确保你的CulturalRouteHandler正确实现IRouter的两个核心方法:RouteAsync(负责解析路由、设置当前文化)和GetVirtualPath(负责生成带文化参数的URL)。
  • 如果需要验证文化参数的格式,自定义一个实现IRouteConstraint的CultureRouteConstraint类,在路由配置中指定即可。
  • 若CulturalRouteHandler依赖其他服务(比如IStringLocalizer、IHttpContextAccessor),必须先在builder.Services中注册这些依赖,再注册Handler本身,否则无法通过服务容器获取实例。

内容的提问来源于stack exchange,提问作者zSynopsis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 20:35:17