Поймать URL без маршрута - PullRequest
       24

Поймать URL без маршрута

0 голосов
/ 12 декабря 2018

Чтобы поймать url , у которого нет маршрута, можно сделать что-то вроде этого

services.AddMvc()
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2).AddRazorPagesOptions(options =>
    {
        options.Conventions.AddPageRoute("/Error/Nopage", "{*url}");
    });

Но затем я заметил, что метод OnGet() в Nopage.cshtml.cs получаетвызывается для всех маршрутов, даже для того, у которого есть маршрут.

Это стандартное поведение и как предполагается ловить не 1017 * URL-адреса без маршрутизации ?... или есть какой-то другой способ поймать url без маршрутов.

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


Как примечание, до использования AddPageRoute я делал это в Startup.cs, который работал просто отлично, хотя вышеописанное выглядело скорее как как человекпредположим, чтобы сделать это .

app.UseMvc();

// Page missing in MVC...
app.Use(async (context, next) =>
{
    //simplified code snippet
    s = await File.ReadAllTextAsync(Path.Combine(env.WebRootPath, "pagemissing.html"));
    await context.Response.WriteAsync(s);
});

1 Ответ

0 голосов
/ 13 декабря 2018

Похоже, вы пытаетесь перехватить 404 и вернуть пользовательскую страницу с ошибкой.ASP.NET Core включает промежуточное программное обеспечение, которое делает это: StatusCodePagesMiddleware.Вы добавляете в ваш метод Configure следующее:

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

, где {0} является заполнителем для кода состояния.Создайте страницу с именем 404.cshtml , и она будет выполняться всякий раз, когда кто-то просматривает несуществующий URL-адрес.Вы также можете создать страницу с именем 500.cshtml , и она будет выполнена в случае ошибки сервера.

Подробнее об этом можно узнать здесь: https://www.learnrazorpages.com/configuration/custom-errors

...