Генерация ссылок не создает надлежащие ссылки в пределах области - PullRequest
0 голосов
/ 08 сентября 2018

У меня есть проект ASP.NET Core только с одной областью под названием Data. Контроллер Home по умолчанию по-прежнему отсутствует.

Проблема

Ссылка на область Data в проекте не работает. Хотя маршрутизация работает нормально.

Если я вручную введу ссылку localhost / Data , я получу правильное действие Index контроллера Home области Data. Так что маршрутизация определенно работает.

Однако <a asp-area="Data" asp-controller="Home" asp-action="Index">Data</a> оценивается по ссылке localhost /? Area = Data , которая не работает и на самом деле должна быть localhost / Data .

Ссылки внутри области Data также не оцениваются должным образом. Что должно быть localhost / Data / Controller это просто localhost / Controller . Снова ручной ввод ссылки работает нормально.

Конфигурация

Как я настроил проект до сих пор, чтобы попытаться заставить работать ссылки: - Маршруты добавляются следующим образом

app.UseMvc(routes =>
{
    // Default Route
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}"
    );
    // Area Route
    routes.MapRoute(
        name: "areas",
        template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
    );
});
  • Все контроллеры в пределах Data имеют атрибут [Area("Data")].
  • Добавлен TagHelper _ViewImport.cshtml в Области / Данные / Представления @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers.

Я вообще пытался следовать официальной документации , но, похоже, ничего не работает.

Вопрос

Так что я, очевидно, хотел бы, чтобы ссылки работали без их «жесткого кодирования», и мне интересно, почему предполагаемое поведение не работает.

Любые советы приветствуются.

1 Ответ

0 голосов
/ 09 сентября 2018

Вам необходимо изменить порядок ваших маршрутов. Вы должны начать с более конкретных маршрутов, а затем с более общих маршрутов:

app.UseMvc(routes =>
{
    // More specific area route
    routes.MapRoute(
       name: "areas",
       template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
    );
    // Any other (default)
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}"
    );

});

...