ASP. NET Перенаправление основного пользовательского промежуточного программного обеспечения на действие не работает - PullRequest
2 голосов
/ 27 марта 2020

Я пытаюсь использовать пользовательское промежуточное ПО для обработки ошибки 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"

Ответы [ 2 ]

2 голосов
/ 31 марта 2020

Если возможно, вы можете попробовать использовать UseStatusCodePagesWithReExecute метод расширения для достижения ваших требований.

app.UseStatusCodePagesWithReExecute("/error/{0}");

Кроме того, в вашем пользовательском коде промежуточного программного обеспечения logi c вы можете изменить код для перенаправления на целевой URL.

if (context.Response.StatusCode == 404)
{
    //context.Request.Path = "/error/404";

    context.Response.Redirect("/error/404");
    return;
}
1 голос
/ 27 марта 2020

Я не уверен, но я думаю, что вам нужно передать HttpContext для вашего вызова next (). У меня не было возможности проверить это. Попробуйте изменить на это:

if (context.Response.StatusCode == 404)
{
    context.Request.Path = "/error/404";
    await context.Next(context.HttpContext);
}
...