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

.NET6 ASP.NET Core应用中标记AllowAnonymous的端点仍跳转登录页如何解决

问题根因

你遇到的跳转问题主要由路由配置冲突导致,其次可能存在Blazor回退路由截胡API请求的情况,具体原因如下:

  • 你在配置MVC时显式关闭了端点路由:options.EnableEndpointRouting = false,同时又保留了app.UseMvcWithDefaultRoute()和app.UseEndpoints()两套路由机制,两套路由逻辑冲突导致请求无法正确匹配到你写的API端点,自然无法识别方法上的[AllowAnonymous]特性。
  • 旧版MVC路由(非端点路由模式)对控制器类级别[Authorize] + 方法级别[AllowAnonymous]的覆盖支持存在兼容问题,尤其在.NET 6+环境下更容易出现权限校验逻辑异常。
  • 若你的Blazor入口页_Host.cshtml配置了全局[Authorize]特性,未匹配到Controller的API请求会被回退路由引导到Blazor入口,直接触发Azure AD B2C的登录跳转。

解决步骤

  1. 修复路由配置冲突
    • 把services.AddMvc(options => options.EnableEndpointRouting = false)修改为services.AddMvc(options => options.EnableEndpointRouting = true),启用.NET 6+推荐的端点路由模式。
    • 删除Configure方法中的app.UseMvcWithDefaultRoute()代码,避免两套路由逻辑冲突,你的UseEndpoints中已经配置了足够的路由规则,无需保留旧版MVC路由配置。
  2. 调整端点映射顺序
    确保UseEndpoints中精确路由的注册顺序优先于模糊的回退路由,你当前的顺序已符合要求,可以再确认一次:
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
        endpoints.MapControllers(); // API路由优先匹配
        endpoints.MapBlazorHub();
        endpoints.MapFallbackToPage("/_Host"); // 回退路由放最后
    });
    
  3. 验证路由匹配和特性引用
    • 确认你控制器中引用的[Authorize]和[AllowAnonymous]特性都来自Microsoft.AspNetCore.Authorization命名空间,避免引用错误导致特性不生效。
    • 访问地址注意控制器名称的匹配:你的控制器类名为GeneratePdfController,正确的访问路径应为https://localhost:44300/api/GeneratePdf/get(路由默认不区分大小写,优先用HTTPS访问,避免UseHttpsRedirection和Cookie安全策略的影响)。
  4. 可选:显式豁免API端点授权
    如果以上操作后仍有问题,可以在端点映射时直接给所有API端点添加允许匿名访问的元数据:
    endpoints.MapControllers().AllowAnonymous();
    
    该配置优先级更高,会覆盖控制器类上的[Authorize]特性,适合API整体需要对外开放的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:36:03