Razor Page Маршрутизация с дружественными маршрутами не отвечает - PullRequest
0 голосов
/ 17 октября 2018

После https://www.learnrazorpages.com/razor-pages/routing и «Дружественные маршруты»

С такой структурой папок:

~Pages / (or "Areas" in last example)
External
      PageA
          Index.cshtml
Internal
      PageB
          Index.cshtml

И затем я хочу добавить эти маршруты

services.AddMvc()
.AddRazorPages(options =>
{
    // Even though above guide states this route it...
    // throws exception for "External/PageA" so I have to set "/External/PageA"
    options.Conventions.AddPageRoute("External/PageA", "/A"); 
    // throws exception for "External/PageB" so I have to set "/External/PageB" 
    options.Conventions.AddPageRoute("Internal/PageB", "/B");
});

Но все, что я получаю, это 404 не найденЯ пробовал несколько комбинаций.Я даже следовал за установкой Area и переместил ее в области с такой же структурой внутри папки Area:

services.AddMvc()
.AddRazorPages(options =>
{
    options.AllowAreas = true;
    // Also tried "PageA" and "/PageA", "A" and "/A"
    options.Conventions.AddAreaPageRoute("External", "/PageA", "/A");
    // Also tried "PageB" and "/PageB", "B" and "/B"
    options.Conventions.AddAreaPageRoute("Internal", "/PageB", "/B");
});

Это больше похоже на то, что вся установка соглашения полностью игнорируется, так как прогресс был 0%.

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

Есть предложения - есть идеи?

1 Ответ

0 голосов
/ 17 октября 2018

Со страницы, на которую вы ссылались:

Метод [AddPageRoute] принимает два параметра.Первый - это относительный путь к файлу страницы Razor без расширения

. Вы указываете путь к папке , содержащей страницу.Вам необходимо добавить «/ Index» в конец первого аргумента:

options.Conventions.AddPageRoute("/External/PageA/Index", "A");

То же самое верно при работе с областями.Необходимо указать относительный путь к фактической странице, а не имя папки:

options.Conventions.AddAreaPageRoute("External", "/PageA/Index", "/A");

Предполагается, что структура выглядит следующим образом:

Areas External Pages PageA Index.cshtml

...