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

ASP.NET WebApi未登录访问授权接口返回404而非401问题排查

问题原因

你遇到的未登录访问API返回404而非401的问题,本质是AddDefaultIdentity默认会将未授权请求重定向到登录页面,但你的API路由下不存在该登录页,因此服务器返回404。而API场景需要直接返回401未授权响应,而非重定向。

解决方案

调整Identity的Cookie配置,针对API路径禁用重定向逻辑,直接返回401:

修改Program.cs中的Identity注册代码:

builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddCookie(options =>
    {
        options.Events.OnRedirectToLogin = context =>
        {
            // 判断是否为API请求
            if (context.Request.Path.StartsWithSegments("/api"))
            {
                context.Response.StatusCode = StatusCodes.Status401Unauthorized;
                return Task.CompletedTask;
            }
            // 非API请求保持原有重定向逻辑
            context.Response.Redirect(context.RedirectUri);
            return Task.CompletedTask;
        };
    });
补充说明
  • 你当前的中间件顺序UseRouting → UseAuthentication → UseAuthorization是正确的,无需调整。
  • 如果项目是纯API场景,更推荐使用JWT认证替代Cookie认证,从根源避免这类重定向问题;若需保留Cookie认证,上述配置即可解决当前问题。

内容的提问来源于stack exchange,提问作者g.pickardou

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 21:32:43