使用ASP.NET Core中间件截获API响应(错误代码:403)

时间:2019-05-14 10:06:40

标签: c# asp.net-core-mvc asp.net-core-webapi http-status-code-403 asp.net-core-middleware

我有一个使用ASP.NET Core MVC作为客户端和后端使用ASP.NET Core WEB API的应用程序。我使用辅助方法来帮助我将所有请求发送到API并获得响应。我无法弄清楚如何在一处处理来自API的403响应(使用中间件或过滤器之类的东西)。

我不想在控制器的每个动作中进行错误代码检查。我想知道我们是否可以拦截下面代码中的第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);
  }

每当从API发送错误代码(例如,禁止403)时,我都希望将用户从单个位置重定向到特定页面,并且不想在每个操作中检查状态代码。

1 个答案:

答案 0 :(得分:0)

您可以使用UseStatusCodePagesWithReExecute提供的中间件。

您可以像这样注册(取决于您实际要执行的操作):

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

内插变量{0}包含状态码,可以将其传递给重新执行期间调用的控制器,在这种情况下为HomeController,方法错误。

希望这会有所帮助。