Фильтр авторизации продолжается, когда код состояния установлен .net core 2.1 - PullRequest
0 голосов
/ 16 ноября 2018

В моем методе контроллера у меня есть:

public class HomeController : Controller
{
    [Authorisation(),HttpGet]
    public IActionResult Index()
    {
          return View("~/Views/Home/Index.cshtml");
    }
}

В моем фильтре авторизации у меня есть:

public void OnAuthorization(AuthorizationFilterContext context)
{
   …..
   context.HttpContext.Response.StatusCode = StatusCodes.Status401Unauthorized;
            return;
   …..

Когда он нажимает код выше в моем фильтре авторизации.Код по-прежнему продолжается для просмотра.Помещая точку останова в представление, если я затем делаю следующее в ближайшем окне:

this.ControllerContext.HttpContext.Response.StatusCode

Это возвращает мне 401, как и ожидалось.

обратно в мой файл startup.cs, который я имею:

app.Use(async (context, next) =>
{
    await next.Invoke();
    if (context.Response.StatusCode == 401)
    {
        context.Response.Redirect("/user/signin/");
    }
});

Я не понимаю, почему контроллер переходит к представлению при этом условии.

1 Ответ

0 голосов
/ 16 ноября 2018

Чтобы запустить режим авторизации при коротком замыкании конвейера фильтра, необходимо установить Result в контексте фильтра :

Получает или задает результат запроса.Установка значения Result в значение, отличное от null внутри фильтра авторизации, приведет к короткому замыканию остальной части конвейера фильтра.

Таким образом, ваш фильтр должен сделать что-то вроде этого:

public void OnAuthorization(AuthorizationFilterContext context)
{
    // …
    context.Result = new StatusCodeResult(StatusCodes.Status401Unauthorized);
}

Вы также можете использовать UnauthorizedResult вместо:

context.Result = new UnauthorizedResult();

Кстати.Я бы посоветовал вам взглянуть на главу о безопасности документации ASP.NET Core.Стек аутентификации и авторизации, который поставляется с фреймворком, действительно мощный, и вы, вероятно, можете использовать его для непосредственного достижения того, что вы пытаетесь сделать там.При правильной настройке, например, перенаправление на страницу входа в систему происходит по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...