ASP.NET 核心自定义中间件重定向到操作无效
ASP.NET Core Custom Middleware redirect to action not working
我正在尝试使用自定义中间件来处理 404 错误:
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\error4"
那样直接拨打电话是否会被调用
我不是很肯定,但我认为您需要将 HttpContext 传递给对 next() 的调用。我还没有机会测试这个。尝试更改为:
if (context.Response.StatusCode == 404)
{
context.Request.Path = "/error/404";
await context.Next(context.HttpContext);
}
如果可以,您可以尝试使用UseStatusCodePagesWithReExecute extension method来达到您的要求。
app.UseStatusCodePagesWithReExecute("/error/{0}");
此外,在您的自定义中间件代码逻辑中,您可以修改代码以重定向到目标url。
if (context.Response.StatusCode == 404)
{
//context.Request.Path = "/error/404";
context.Response.Redirect("/error/404");
return;
}
我正在尝试使用自定义中间件来处理 404 错误:
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\error4"
那样直接拨打电话是否会被调用我不是很肯定,但我认为您需要将 HttpContext 传递给对 next() 的调用。我还没有机会测试这个。尝试更改为:
if (context.Response.StatusCode == 404)
{
context.Request.Path = "/error/404";
await context.Next(context.HttpContext);
}
如果可以,您可以尝试使用UseStatusCodePagesWithReExecute extension method来达到您的要求。
app.UseStatusCodePagesWithReExecute("/error/{0}");
此外,在您的自定义中间件代码逻辑中,您可以修改代码以重定向到目标url。
if (context.Response.StatusCode == 404)
{
//context.Request.Path = "/error/404";
context.Response.Redirect("/error/404");
return;
}