【问题标题】: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;
            };
        });

【讨论】:

  • 如果不起作用,请分享您的startup 课程。
【解决方案2】:

尝试使用[Route] 以确保您正确调用该函数

[Authorized]
[Route("Foo")]
public async Task<IActionResult> Foo(FooModel model) 
{ 

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-07
    • 2012-12-02
    • 2021-03-17
    • 2014-04-15
    • 2020-09-01
    • 2015-09-14
    • 1970-01-01
    • 2018-06-09
    相关资源
    最近更新 更多