Blazor: реализация 404 не найденной страницы

Я хотел бы реализовать внутреннюю страницу моего приложения, которая появляется, когда маршрутизатор Blazor не может найти соответствующий маршрут. В настоящее время все запросы направляются на index.html, поэтому я не могу обрабатывать ошибки через iis, как обычно. Если я введу неверный маршрут, мне будет показана пустая страница (которая на самом деле index.html) и появится сообщение об ошибке консоли:

'Router' cannot find any component with a route for '/some/Nonexistent/Route'.

Похоже, я смогу справиться с этим, поскольку маршрутизатор Blazor может распознать, что не определен маршрут, который соответствует запрошенному маршруту, однако мне пока не удалось найти какую-либо документацию по этому поводу.

Как я могу это реализовать? Есть ли способ подключиться к маршрутизатору Blazor и направить все не найденные маршруты на заранее определенный маршрут ошибки?

Я вижу, что https://github.com/aspnet/AspNetCore/issues/5489 имеет проблема, указанная для обработчика 404, однако я не уверен, что это для чего-то более надежного и готового к производству, чем то, что я собираюсь сделать


person GregH    schedule 19.12.2018    source источник


Ответы (2)


Попробуйте это: App.cshtml

<Router AppAssembly=typeof(Program).Assembly FallbackComponent="typeof(Error404)" >

Создайте компонент с именем Error404.cshtml

Примечание: это только предположение, которое я понял из раскопок класса Router. См.

Пожалуйста, дайте мне знать, работает ли это для вас.

person enet    schedule 19.12.2018
comment
приводит к ошибке времени выполнения сразу после запуска приложения: Uncaught (in promise) Error: System.InvalidOperationException: Object of type 'Microsoft.AspNetCore.Blazor.Routing.Router' does not have a property matching the name 'FallbackComponent'. что я нахожу несколько странным, учитывая, что я вижу свойство с именем FallBackComponent, помеченное как [Parameter] в исходном файле для Router (я использую Blazor v0.7.0, который должен быть текущим) - person GregH; 20.12.2018
comment
Если посмотреть на историю этого файла, похоже, что FallbackComponent был добавлен 5 дней назад (14.12.2018). Похоже, он еще не был включен в выпуск Blazor даже в ленту предполагаемых ночных сборок по адресу dotnet.myget.org/gallery/blazor-dev, который указывает на правильное репо, и они еще не обновили документы, чтобы предоставить нам правильный канал для каналов CI, если он есть - person GregH; 20.12.2018
comment
Я слежу за этим и отмечу как принятый, когда пакет, включающий этот исходный код, станет доступным, и я смогу его протестировать. Похоже, это должно сработать - person GregH; 28.12.2018
comment
В App.razor теперь есть элемент <NotFound> по умолчанию. - person The Muffin Man; 09.07.2020

В App.razor добавьте элемент <NotFound> в <Router> и укажите, какой контент вы хотите отображать, когда Blazor не может найти указанный маршрут.

Например:

<Router AppAssembly="typeof(Program).Assembly">
    <NotFound>
        <h1>404 Not Found</h1>
    </NotFound>
</Router>

(Примечание: если это приложение на стороне сервера, то это будет typeof (Startup) .Assembly)

Изменить: изменено <NotFoundContent> на <NotFound>

Источник

person ssp    schedule 21.08.2019
comment
Но вернет ли этот подход код 404? Я только что протестировал и не увидел в браузере кода ошибки 404. Код ошибки 404 может быть очень важен для SEO. - person Emran Hussain; 01.06.2020
comment
@EmranHussain, кажется, трудно вернуть правильный код 404, но вы сможете получить его, используя инъекцию зависимостей. См. stackoverflow.com/a/62300957/565288 - person Monkey Code; 10.06.2020