我有一个使用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)时,我都希望将用户从单个位置重定向到特定页面,并且不想在每个操作中检查状态代码。
答案 0 :(得分:0)
您可以使用UseStatusCodePagesWithReExecute提供的中间件。
您可以像这样注册(取决于您实际要执行的操作):
app.UseStatusCodePagesWithReExecute("/Home/Error", "?code={0}");
内插变量{0}
包含状态码,可以将其传递给重新执行期间调用的控制器,在这种情况下为HomeController,方法错误。
希望这会有所帮助。