[英]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.