更改Authorize属性以返回401-.net core 3.1

问题描述

我想使用Authorize属性保护控制器。 然后只需要一个对401s有反应的全局axios拦截

认情况下,似乎Authorize属性将302返回到/ account / login。我该如何覆盖呢?

代码: Startup.cs / ConfigureServices

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie();

Startup.cs /配置

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

main.ts

axios.interceptors.response.use(undefined,function (error) {
    if (error.response.status === 401) {
       // I'll do something here
       return Promise.reject(error);
    }
});

解决方法

您可以按以下方式更改services.AddCookie

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
        .AddCookie(options =>
        {
            options.Events.OnRedirectToLogin = context =>
            {
                context.Response.StatusCode = 401;
                return Task.CompletedTask;
            };
        });

确保您的中间件订单如下:

app.UseRouting();

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

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