Как я могу поймать это 404 для маршрута, который не существует? - PullRequest
1 голос
/ 01 апреля 2020

Я использую ASP. NET Core 3.0 и пытаюсь написать код для возврата настраиваемого ответа на эти запросы по несуществующему маршруту или маршруту, который не соответствует ни одной из зарегистрированных конечных точек.

Согласно тому, что я нашел и понял, есть это промежуточное ПО, которое может обрабатывать код состояния, поэтому я делаю следующее:

app.UseStatusCodePages(context => {

    if (context.HttpContext.Response.StatusCode == 404) 
    {
        // Validates that is a redirection because it didn't
        // match any endpoint
    }

    return Task.CompletedTask;
});

Мой вопрос: как я могу определить, что 404 соответствует перенаправлению, потому что не найдено ни одной подходящей конечной точки? Поскольку он также может ссылаться на то, что он не находит указанный ресурс, для которого конечная точка действительно существует, но ресурс недоступен и т. Д. c.

Заранее спасибо.

1 Ответ

2 голосов
/ 01 апреля 2020

Вы можете использовать UseStatusCodePagesWithReExecute метод расширения:

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

Затем вы создаете новый контроллер для перехвата этого события:

public class ErrorController : Controller
{
    public IActionResult Page401()
    {
        // render Page401.cshtml
        return View();
    }

    public IActionResult Page404()
    {
        // render Page404.cshtml
        return View();
    }
}

Наконец, вы создаете представления всех кодов состояния, которые вы хотите перехватить.

При тестировании с несуществующим URL-адресом страница будет отображаться с содержимым Page404.cshtml представления бритвы.

...