#asp.net-core #.net-core #asp.net-core-3.1
#asp.net-core #.net-core #asp.net-core-3.1
Вопрос:
Я хочу защитить свои контроллеры атрибутом авторизации. А затем просто создайте глобальный перехватчик axios, который реагирует на 401-е
Кажется, что атрибут авторизации возвращает 302 в / account / login по умолчанию. Как я могу переопределить это?
Код: Startup.cs / ConfigureServices
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie();
Startup.cs / Configure
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);
}
});
Комментарии:
1. В методе configure app.useauthorization и app.useauthentication должны быть взаимозаменяемыми. Аутентификация предшествует авторизации.
2. по умолчанию используется возврат 401, в вашей конфигурации что-то не так, как упоминалось выше, важен порядок вашего метода настройки
3. Я изменил порядок, но я все еще получаю 302. Спасибо
4. Я запустил совершенно новый веб-сайт .net Core с VS 2019 и добавил только 3 строки в startup.cs и добавил [Авторизовать] в WeatherForecastController. Переход к /weatherforecast по-прежнему перенаправляет /account / login
Ответ №1:
Вы могли бы изменить свой 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?}");
});