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

添加[Authorize]后Blazor Server应用登出报错求助

解决Blazor Server登出后跳转错误问题

问题根源

你在受保护页面(如Account/Manage)点击登出时,将当前受保护页面的URL作为ReturnUrl传递给登出接口。登出完成后,系统尝试跳转到该ReturnUrl,但此时用户已处于未授权状态,触发[Authorize]属性的重定向逻辑,试图跳转到登录页。但实际存在两个核心问题:

  • 传递受保护页面作为ReturnUrl本身不合理,登出后应跳转至允许匿名访问的页面(如首页);
  • 系统默认跳转的登录页路径(/Account/Login)可能与你实际的登录页路由不匹配,导致找不到页面。

解决方案

1. 修改登出按钮的ReturnUrl指向匿名页面

将表单中ReturnUrl的@currentUrl替换为首页路径"/",登出后直接跳转至首页,避免触发受保护页面的重定向:

<div class="nav-item px-3">
    <form action="Account/Logout" method="post">
        <AntiforgeryToken />
        <input type="hidden" name="ReturnUrl" value="/" />
        <button type="submit" class="nav-link">
            <span class="bi bi-arrow-bar-left-nav-menu" aria-hidden="true"></span> Logout
        </button>
    </form>
</div>

2. 确认登录页路由配置

检查Program.cs中的身份验证配置,确保LoginPath与你的登录页实际路由一致。例如,若登录页路由为/Login,配置如下:

using Microsoft.AspNetCore.Authentication.Cookies;

builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        options.LoginPath = "/Login"; // 替换为你的登录页实际路由
        options.LogoutPath = "/Account/Logout";
        options.AccessDeniedPath = "/AccessDenied";
    });

如果使用ASP.NET Core Identity,需确保添加Razor Pages中间件(Identity的登录、登出等页面基于Razor Pages实现):

app.MapRazorPages();

3. 关于找不到Logout相关文件的说明

Blazor Server默认的登出功能由ASP.NET Core Identity的后端端点处理,没有对应的Blazor组件文件。无需寻找相关文件,直接通过表单提交到Account/Logout接口即可完成登出操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 23:45:03