ASP.NET WebApi 返回 HTTP 404 而不是 HTTP 401

问题描述 投票:0回答:1

来自 Program.cs 的简单脚手架个人身份验证,:

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection") ?? throw new InvalidOperationException("Connection string 'DefaultConnection' not found.");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();

builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<ApplicationDbContext>();

// ...
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();

app.MapControllerRoute(
  name: "default",
  pattern: "{controller}/{action=Index}/{id?}");

控制器:

[ApiController]
[Route("/api/myresource")]
public class MyResourceController : ControllerBase {
// ...

    [Authorize]
    [HttpGet("dummy")]
    public IActionResult GetDummy()
    {
        return Ok(new Dummy());
    }

当我获取 /api/myresource/dummy 时,它返回 HTTP 404 而不是 HTTP 401。

用例:

  • 如果我注释掉

    [Authorize]
    属性:工作正常,返回虚拟数据(所以我认为路由到位并且有效)

  • 如果

    [Authorize]
    属性到位并且我登录:工作正常,返回虚拟数据(所以我想路由到位并且工作)

  • 如果

    [Authorize]
    属性到位并且我 not 登录:返回 HTTP 404 而不是 HTTP 401,甚至没有调用该方法。

问题

我希望 API 返回 HTTP 401。我想这应该是开箱即用的,所以我做错了什么。我错过了什么?

authorization asp.net-identity asp.net-core-webapi http-error
1个回答
0
投票

根据您的描述,我认为这是由于您访问受

[Authroize]
保护的端点时引起的,如果您未登录,该项目会将您重定向到登录端点,但是当项目找不到登录端点时,它将显示 404 错误。您可以按照此 Link 配置您的登录端点,或者您可以按照此 link 使项目直接返回 401 错误,而不是重定向到登录端点。

© www.soinside.com 2019 - 2024. All rights reserved.