当用户未通过身份验证时,ASP.NET Core 5 Web API返回404代码,而不是401代码。这是因为ASP.NET Core 5 Web API默认情况下使用了身份验证中间件,该中间件会将未经身份验证的请求视为匿名请求,并返回404代码而不是401代码。
404代码表示资源未找到,而401代码表示未经身份验证。返回404代码可以防止潜在的安全风险,因为它不会暴露未经身份验证的资源是否存在。这种行为可以防止恶意用户通过不断尝试不同的URL来探测系统中的资源。
然而,如果你希望在用户未经身份验证时返回401代码,你可以通过自定义身份验证中间件来实现。以下是一种可能的实现方式:
public class CustomAuthenticationMiddleware
{
private readonly RequestDelegate _next;
public CustomAuthenticationMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
if (!context.User.Identity.IsAuthenticated)
{
context.Response.StatusCode = 401;
return;
}
await _next(context);
}
}
public static class CustomAuthenticationMiddlewareExtensions
{
public static IApplicationBuilder UseCustomAuthentication(this IApplicationBuilder builder)
{
return builder.UseMiddleware<CustomAuthenticationMiddleware>();
}
}
然后,在Startup.cs文件的Configure方法中使用自定义身份验证中间件:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ...
app.UseCustomAuthentication();
// ...
}
使用自定义身份验证中间件后,未经身份验证的请求将返回401代码,而经过身份验证的请求将继续执行后续的中间件和处理程序。
请注意,以上示例只是一种实现方式,你可以根据自己的需求进行调整和扩展。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云