繁体   English   中英

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

[英]Intercept API Response(Error code: 403) using a 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发送错误代码(Ex:403 forbidden)时,我想将用户从一个地方重定向到特定页面,并且不希望在每个操作中检查状态代码。

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

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

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

插值变量{0}包含状态代码,它可以传递给在重新执行期间调用的控制器,在本例中为HomeController,Method Error。

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM