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
相关产品推荐
相关产品推荐

