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

ASP.NET Core 6中IdentityServer路由未匹配时返回自定义404页面问题

解决方案:为IdentityServer Razor Pages配置自定义404页面

问题原因

你遇到的InvalidOperationException是因为未指定Identity Area参数——Identity相关的Razor Pages默认属于Identity Area,直接使用/Identity/Error/404作为页面路径会导致框架找不到对应端点,因为它默认会在根Area(空)下查找页面。

正确配置方式

方法1:修正MapFallbackToPage的用法

在IdentityServer的端点配置中,需要明确指定Area为Identity,并使用页面的路由路径(而非物理路径)。假设你的404页面物理路径是/Areas/Identity/Pages/Error/404.cshtml:

appIdentityServer.UseEndpoints(endpoints =>
{
    endpoints.MapRazorPages();
    // 指定Area为Identity,页面路由路径为/Error/404
    endpoints.MapFallbackToPage("/Error/404", new { area = "Identity" });
});

同时确保404.cshtml的@page指令正确:

@page "/Identity/Error/404"
@model YourApp.Areas.Identity.Pages.Error.404Model
<!-- 页面内容 -->

方法2:使用中间件捕获404并返回自定义页面

如果方法1仍有问题,可以在IdentityServer的中间件分支中添加自定义404捕获逻辑,放在UseEndpoints之前:

appIdentityServer.Use(async (context, next) =>
{
    await next();

    // 仅处理Identity相关请求的404
    if (context.Response.StatusCode == 404 && 
        (context.RequestIsForIdentityServerUi() || context.RequestIsForIdentityServerEndpoint()))
    {
        context.Response.StatusCode = 404;
        // 重定向到自定义404页面
        context.Response.Redirect("/Identity/Error/404");
        // 若不想重定向,可直接返回页面内容:
        // var pagePath = Path.Combine(env.ContentRootPath, "Areas/Identity/Pages/Error/404.cshtml");
        // var pageContent = await File.ReadAllTextAsync(pagePath);
        // await context.Response.WriteAsync(pageContent);
    }
});

// 后续的UseRouting、UseAuthentication等配置不变
appIdentityServer.UseRouting();
// ...其他中间件
appIdentityServer.UseEndpoints(endpoints =>
{
    endpoints.MapRazorPages();
});

关键注意事项

  • 确认Identity Area已正确注册:在Program.cs中确保已添加Identity Razor Pages的Area支持:
    services.AddIdentity<IdentityUser, IdentityRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders()
        .AddDefaultUI(); // 此方法会自动配置Identity Area的路由
    
  • 避免路由冲突:确保自定义404页面的路由不会与其他Identity端点冲突。
  • 测试时清除浏览器缓存:避免旧路由缓存导致的测试异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:15:29