【问题标题】:Customize Asp.NET Core Identity Unauthorized Response Type and Statuscode自定义 Asp.NET Core Identity 未经授权的响应类型和状态码
【发布时间】:2021-02-02 14:14:44
【问题描述】:
我有一个带有 [Authorized] 属性的 WebApi 端点。我没有配置任何额外的策略或任何东西。
[Authorized]
[Route("foo")]
public async Task<IActionResult> Foo(FooModel model)
{
// .......
}
当我尝试访问此端点并且我未通过身份验证时,我将收到一个不包含内容的 404 响应。
我想要得到:带有 401 状态码的自定义响应类型。我该怎么做?
【问题讨论】:
标签:
c#
asp.net-core
asp.net-core-webapi
【解决方案1】:
您可以在 Startup 类中添加以下代码:
services.ConfigureApplicationCookie(options =>
{
options.Events.OnRedirectToLogin = context =>
{
context.Response.StatusCode = 401;
return Task.CompletedTask;
};
});
你的行动:
[Authorize]
public async Task<IActionResult> Foo(FooModel model)
{
// ...
}
顺便说一句,这会导致您无法重定向到您的登录页面,您可以将其设置为仅适用于api,如下所示:
services.ConfigureApplicationCookie(options =>
{
options.Events.OnRedirectToLogin = context =>
{
if (context.Request.Path.StartsWithSegments("/api")
&& context.Response.StatusCode == StatusCodes.Status200OK)
{
context.Response.Clear();
context.Response.StatusCode = StatusCodes.Status401Unauthorized;
return Task.CompletedTask;
}
context.Response.Redirect(context.RedirectUri);
return Task.CompletedTask;
};
});
【解决方案2】:
尝试使用[Route] 以确保您正确调用该函数
[Authorized]
[Route("Foo")]
public async Task<IActionResult> Foo(FooModel model)
{
}