Маршрутизация страниц Razor и маршрутизация файловой системы

#asp.net-core #razor #razor-pages

#asp.net-core #razor #razor-страницы

Вопрос:

У меня есть страница razor MyPage.cshtml со следующей аннотацией

 @page "{id}"
  

Это есть, поэтому у меня может быть маршрут, который выглядит следующим образом;

 /MyPage/Blah
  

Все это работает.
Когда я вижу такие вещи, как следующее;

 /MyPage/Blah/content/somefile.js
  

это приводит к 404 .
Я бы хотел, чтобы это обрабатывалось файловой системой.
У меня есть следующий файл в;

 wwwroot/MyPage/Blah/content/somefile.js
  

Я использую asp.net ядро 3.1

Ответ №1:

Во-первых, я тестирую код, и я могу работать.

И затем я обнаруживаю, что если я удалю app.UseStaticFiles(); в своем startup.cs.Я могу получить ту же ошибку, что и вы. Таким образом, вы можете проверить, можете ли вы получить доступ к другому файлу в wwwwroot.Если нет, вы можете проверить свой startup.cs и добавить app.UseStaticFiles(); вот так в Configure:

             app.UseHttpsRedirection();
            app.UseStaticFiles();

            app.UseRouting();
  

Комментарии:

1. Стандартная маршрутизация работает. У меня был перепутанный UseBlazorFrameworkFiles, который мешал статическим файловым маршрутам.

Ответ №2:

У меня нет других маршрутов, которые мешают статическим файловым маршрутам. т. Е. Моей проблемой было использование lazorframeworkfiles.

Хорошо, итак, из коробки asp.net ядро 3.1 перенаправит на мою страницу;

 /MyPage
  

и если у меня есть куча статических файлов в

 wwwroot/MyPage/some.js
  

это тоже приведет к сбою.
Все хорошо.

У меня возникали другие проблемы с маршрутами, когда на моей странице размещалось приложение blazor и были маршруты на стороне клиента, не связанные с файлами.

Чтобы убедиться, что маршруты правильно обрабатываются во всех этих случаях, мне пришлось добавить следующее на мою страницу razor.

 @page "{id}/{*path:nonfile}"
  

Итак, когда я получил обновление всей страницы для

 /MyPage/MyBlazorApp/counter
  

Теперь моя страница обрабатывает /MyPage/MyBlazorApp часть, а остальная часть передается клиентскому приложению blazor, чтобы окончательно перейти к маршруту на стороне клиента: /MyPage/MyBlazorApp/counter