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

.NET Core 7 Razor Pages路由本地化:无效路由/文化未跳转404问题

解决无效文化/无效路由跳转404的问题

原因分析

当访问/abc这类地址时,RouteDataRequestCultureProvider会优先从路由数据里提取culture值,此时abc会被当作文化标识,但它不在你配置的支持列表(en、pt)中,系统不会直接返回404,而是带着这个无效文化继续处理后续路由,导致错误处理逻辑没按预期触发。

解决方案步骤

1. 添加自定义文化验证中间件

在Program.cs里加一个中间件,专门检查路由中的culture是否合法,无效就直接返回404:

var supportedCultures = new[] { "en", "pt" };
var defaultCulture = "pt";

// 该中间件要放在UseRouting之后,UseRequestLocalization之前
app.Use(async (context, next) =>
{
    if (context.Request.RouteValues.TryGetValue("culture", out var cultureValue) && 
        cultureValue is string culture && 
        !supportedCultures.Contains(culture))
    {
        context.Response.StatusCode = StatusCodes.Status404NotFound;
        await context.Response.StartAsync();
        return;
    }
    await next();
});

2. 调整本地化配置

确保RequestLocalizationOptions配置正确,同时保留默认文化回退逻辑:

var localizationOptions = new RequestLocalizationOptions
{
    DefaultRequestCulture = new RequestCulture(defaultCulture),
    SupportedCultures = supportedCultures.Select(c => new CultureInfo(c)).ToList(),
    SupportedUICultures = supportedCultures.Select(c => new CultureInfo(c)).ToList()
};

localizationOptions.RequestCultureProviders.Insert(0, new RouteDataRequestCultureProvider
{
    RouteDataStringKey = "culture",
    Options = localizationOptions
});

app.UseRequestLocalization(localizationOptions);

3. 完善错误页路由配置

在Error.cshtml顶部设置兼容带/不带文化的路由模板:

@page "/{culture?}/error/{statusCode?}"
@model ErrorModel

Error.cshtml.cs中处理状态码参数:

public class ErrorModel : PageModel
{
    public string? RequestId { get; set; }
    public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
    private readonly ILogger<ErrorModel> _logger;

    public ErrorModel(ILogger<ErrorModel> logger)
    {
        _logger = logger;
    }

    public void OnGet(int? statusCode = null)
    {
        RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier;
        // 可根据statusCode添加对应错误逻辑
    }
}

4. 验证效果

  • 访问/abc:中间件检测到无效文化,直接返回404并跳转到/error/404
  • 访问/en/invalid-page:文化有效但路由无效,原有错误逻辑触发404跳转
  • 访问/contact:自动使用默认文化pt,正常加载页面

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 14:15:54