Http ASP.NET核心自定义中间件重定向到操作不工作

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

我正在尝试使用自定义中间件来处理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\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;
}