Перехватить ответ API (код ошибки: 403) с помощью промежуточного программного обеспечения ASP.NET Core - PullRequest
0 голосов
/ 14 мая 2019

У меня есть приложение, которое использует ASP.NET Core MVC в качестве клиента и ASP.NET Core WEB API на серверной части.Я использую вспомогательный метод, чтобы помочь мне отправить все запросы к API и получить ответ.Я не могу понять, как обрабатывать 403 ответа от API в одном месте (используя что-то вроде промежуточного программного обеспечения или фильтра).

Я не хочу проверять код ошибки при каждом действии контроллера.Я хочу знать, можем ли мы перехватить ответ между строками 1 и 2 в приведенном ниже коде.

var response = httpClient.SendRequest(request);
if(response.StatusCode == StatusCodes.Status403Forbidden) {
    // redirect to some page.
}

Я попытался добавить промежуточное программное обеспечение (как показано ниже), чтобы сделать то же самое и включено в началекласса startup.cs, но ответ в контексте всегда равен 500, а не правильный код ошибки (в данном случае 403).

  public async Task Invoke(HttpContext context)
  {
      if (context.Response.StatusCode == StatusCodes.Status403Forbidden)
      {
          context.Response.Redirect("Page to redirect");
      }

      await _next.Invoke(context);
  }

Всякий раз, когда отправляется код ошибки (например, запрещен 403)из API я хотел бы перенаправить пользователей на определенную страницу из одного места и не желать проверять код состояния в каждом действии.

1 Ответ

0 голосов
/ 24 июня 2019

Вы можете использовать UseStatusCodePagesWithReExecute предоставленное промежуточное ПО.

Вы можете зарегистрировать его следующим образом (в зависимости от действия, которое вы действительно хотите выполнить):

 app.UseStatusCodePagesWithReExecute("/Home/Error", "?code={0}");

Интерполированная переменная {0} содержит код состояния и может быть передан в контроллер, вызываемый во время повторного выполнения, в этом случае HomeController, Method Error.

Надеюсь, это поможет.

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