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

Blazor Server-Side .NET 8 重定向异常问题求助(两类场景)

Blazor Server-Side .NET 8 重定向问题排查与解决

问题描述

我在Blazor Server-Side .NET 8项目中遇到两类重定向相关问题:

  • 场景1:无法成功重定向到<NotFound>页面,请问遗漏了什么配置?
  • 场景2:登录页面重定向在本地开发环境正常,但部署到IIS后出现HTTP ERROR 500错误。使用控制器处理认证流程,控制器内登录成功后跳转/home、登出流程均正常。

补充说明:已在Layout文件夹下创建BlankLayout.razor文件,相关代码如下:

Routes.razor

<CascadingAuthenticationState>
    <Router AppAssembly="typeof(Program).Assembly">
        <Found Context="routeData">
            <AuthorizeRouteView RouteData="routeData" DefaultLayout="typeof(Layout.MainLayout)" >
                <NotAuthorized>
                    <RedirectToLogin />
                </NotAuthorized>
            </AuthorizeRouteView>
            <FocusOnNavigate RouteData="routeData" Selector="h1" />
        </Found>
        <NotFound>
            <LayoutView Layout="typeof(Layout.BlankLayout)">
                <p>There is nothing over here</p>
            </LayoutView>
        </NotFound>
    </Router>
</CascadingAuthenticationState>

RedirectToLogin.razor

@inject NavigationManager NavigationManager
@attribute [AllowAnonymous]

@code {
    protected override void OnInitialized()
    {
        NavigationManager.NavigateTo($"/login?returnUrl={Uri.EscapeDataString(NavigationManager.Uri)}", forceLoad: true);
    }
}

Program.cs

builder.Services.AddAuthorization();
builder.Services.AddCascadingAuthenticationState();
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(x =>
    {
        x.LoginPath = "/login";
        x.LogoutPath = "/auth/logout";
    });

builder.Services.AddControllers();

builder.Services.AddScoped<CookieEvent>();
builder.Services.ConfigureApplicationCookie(x =>
{
    x.EventsType = typeof(CookieEvent);
});

问题解答

场景1:无法触发页面的解决方法

  1. 检查路由定义与冲突

    • 确保所有页面的@page指令无模糊匹配(比如@page "/{*catchAll}"会拦截所有未匹配路由,导致<NotFound>无法触发)。
    • 若页面分布在多个程序集,需给Router添加AdditionalAssemblies参数,指定额外的页面程序集:
      <Router AppAssembly="typeof(Program).Assembly" AdditionalAssemblies="new[] { typeof(OtherAssembly.Page).Assembly }">
      
  2. 验证BlankLayout的有效性

    • 确认BlankLayout.razor正确继承LayoutComponentBase,无编译错误:
      @inherits LayoutComponentBase
      <!-- 布局内容 -->
      @Body
      
    • 临时将<NotFound>内的LayoutView替换为纯文本,测试是否能正常显示,排查布局是否存在问题。
  3. 部署后IIS路由配置

    • 部署到IIS时,需配置URL重写规则,将所有请求转发到_Host.cshtml,否则IIS会直接返回404,不进入Blazor路由处理流程。

场景2:IIS部署后登录重定向500错误的解决方法

  1. 排查自定义Cookie事件

    • 暂时注释掉x.EventsType = typeof(CookieEvent);,使用默认Cookie事件测试是否仍报错,排查CookieEvent类是否存在未处理的异常。
  2. 验证权限与Cookie配置

    • 确保IIS应用程序池身份拥有网站目录的读写权限,Cookie操作可能需要访问临时目录。
    • 若生产环境未配置HTTPS,需调整Cookie的SecurePolicy(测试时临时关闭,生产环境启用HTTPS后改为Always):
      builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
          .AddCookie(x =>
          {
              x.LoginPath = "/login";
              x.LogoutPath = "/auth/logout";
              x.Cookie.SecurePolicy = CookieSecurePolicy.None;
          });
      
  3. 查看详细错误日志

    • 查看IIS站点日志(路径:%SystemDrive%\inetpub\logs\LogFiles),获取500错误的具体子代码,定位配置或权限问题。
    • 启用应用日志记录,在Program.cs添加日志配置后,查看Windows事件查看器的应用程序日志,捕获应用内的异常细节:
      builder.Logging.AddConsole();
      builder.Logging.AddDebug();
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 02:43:17