当用户未经身份验证时,ASP.NET Core 5 Web API 返回 404 代码而不是 401

Jay*_*Jay 6 asp.net asp.net-web-api asp.net-core asp.net5 asp.net-core-webapi

我有一个基于 ASP.NET 5 框架和 Swagger UI 编写的 Web API。

当用户向任何端点发出经过身份验证的请求时,我会收到 404“就像框架将用户重定向到不存在的页面一样!” 如果框架由于未经授权的请求而自动重定向请求,我想更改该行为以返回 401 json 响应。如果没有,如何将 JSON 响应的响应代码从 404 更改为 401?

Startup 类如下所示

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();

    services.AddSwaggerGen(swagger =>
    {
        swagger.SwaggerDoc("v1", new OpenApiInfo
        {
            Version = "v1",
            Title = "Student Athlete Wellness Tracker API",
            Description = "API to provide data for the Student Athlete Wellness Trackers",

        });
        swagger.AddSecurityDefinition("basic", new OpenApiSecurityScheme()
        {
            Name = "Authorization",
            Type = SecuritySchemeType.Http,
            Scheme = "basic",
            In = ParameterLocation.Header,
            Description = "Basic Authorization header using the Bearer scheme.",
        });

        swagger.AddSecurityRequirement(new OpenApiSecurityRequirement
        {
            {
                new OpenApiSecurityScheme
                {
                    Reference = new OpenApiReference
                    {
                        Type = ReferenceType.SecurityScheme,
                        Id = "basic"
                    }
                },
                Array.Empty<string>()
            }
        });
    });

    services.AddAuthentication("BasicAuthentication")
            .AddScheme<AuthenticationSchemeOptions, BasicAuthenticationHandler>("BasicAuthentication", null);
}


public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/error");
        app.UseHsts();
    }
    app.UseSwagger();
    app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Student Athlete Wellness Trackers - v1"));

    app.UseCors(x => x.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());

    app.UseHttpsRedirection();

    app.UseRouting();
    app.UseAuthentication();
    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}
Run Code Online (Sandbox Code Playgroud)

小智 6

我遇到了同样的问题。

\n

我添加了第二个选项行,解决了问题。

\n
services.AddAuthentication(options =>\n            {\n                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;\n                options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;\n            })\n
Run Code Online (Sandbox Code Playgroud)\n

可以阅读官方文档了解更多\xef\xbc\x9a https://learn.microsoft.com/en-us/aspnet/core/security/authentication/?view=aspnetcore-5.0

\n

示例\xef\xbc\x9a添加 Authorize 属性时 Web api 核心返回 404

\n