ASP.NET Core 2.1 Области маршрутизации не работают - PullRequest
0 голосов
/ 30 сентября 2018

У меня есть структура папок для моей новой области

enter image description here

Вот как я настроил ее при запуске:

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");

    routes.MapRoute(
      name: "areas",
      template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
    );
});

Вот как я создал свой базовый контроллер

namespace App.Areas.Applications.Controllers
{
    [Area("Applications")]
    [Authorize]
    public abstract class ApplicationsBaseController : Controller
    {

    }
}

Мой ApplicationsController затем наследует BaseController

Однако, когда я устанавливаю такую ​​ссылку

<li class="nav-item"><a asp-area="Applications" asp-controller="Applications" asp-action="Index" class="nav-link">Applications</a></li>

Thisэто ссылка, которая появляется в моем URL https://localhost:44338/Applications?area=Applications, и я получаю страницу не может быть найдена.

Что я упустил при настройке моей Области?

РЕДАКТИРОВАТЬ:

Когда я добавляю [Маршрут ("Приложения / [контроллер]")] после моей [Область («Приложения»)], я получаю эту ошибку

Произошло необработанное исключение при обработке запроса.AmbiguousActionException: несколько действий совпадают.Следующие действия соответствовали данным маршрута и удовлетворяли всем ограничениям:

App.Areas.Applications.Controllers.ApplicationsController.Index (App) App.Areas.Applications.Controllers.ApplicationsController.Create (App) App.Areas.Applications.Controllers.ApplicationsController.NewRole (Приложение)

Ответы [ 3 ]

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

IMO, вам следует создать папку Controller для определенных видов.В противном случае произойдет сбой, когда в области Applications будет несколько контроллеров.

В любом случае, для возврата представлений только в Views Folder попытайтесь настроить AreaViewLocationFormats для указания местоположения поиска представлений.

        public void ConfigureServices(IServiceCollection services)
    {
        //rest services
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1).AddSessionStateTempDataProvider();
        services.Configure<RazorViewEngineOptions>(o =>
        {
            o.AreaViewLocationFormats.Add("/Areas/{2}/{0}" + RazorViewEngine.ViewExtension);
        });
    }
0 голосов
/ 04 июля 2019

Я понял, в чем проблема.В каждом контроллере мне нужно было объявить [Area = "AreaName"] вверху, прежде чем что-либо еще, чтобы работала маршрутизация.

Спасибо всем за помощь.

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

Поставьте его перед маршрутом по умолчанию ... вот так

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

routes.MapRoute(
    name: "default",
    template: "{controller=Home}/{action=Index}/{id?}");
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...