Http ASP.NET核心自定义中间件重定向到操作不工作
我正在尝试使用自定义中间件来处理404错误:Http ASP.NET核心自定义中间件重定向到操作不工作,http,asp.net-core,asp.net-core-webapi,asp.net-core-middleware,Http,Asp.net Core,Asp.net Core Webapi,Asp.net Core Middleware,我正在尝试使用自定义中间件来处理404错误: app.Use(async (context, next) => { await next(); if (context.Response.StatusCode == 404) { context.Request.Path = "/error/404"; await next(); } }); 但在错误控制器中未调用所需的操作: [Route("error")] public c
app.Use(async (context, next) =>
{
await next();
if (context.Response.StatusCode == 404)
{
context.Request.Path = "/error/404";
await next();
}
});
但在错误控制器中未调用所需的操作:
[Route("error")]
public class ErrorController : Controller
{
public ErrorController()
{
}
[Route("404")]
public IActionResult PageNotFound()
{
return View();
}
}
我已经检查了它是否被调用,如果要直接调用“http:\localhost\error\404”我不是肯定的,但我认为您需要将HttpContext传递给对next()的调用。我还没有机会测试这个。尝试更改为:
if (context.Response.StatusCode == 404)
{
context.Request.Path = "/error/404";
await context.Next(context.HttpContext);
}
如果可能,您可以尝试使用来实现您的需求
app.UseStatusCodePagesWithReExecute("/error/{0}");
此外,在自定义中间件代码逻辑中,可以修改代码以重定向到目标url
if (context.Response.StatusCode == 404)
{
//context.Request.Path = "/error/404";
context.Response.Redirect("/error/404");
return;
}