MapRoute с универсальным контроллером
-
23-09-2019 - |
Вопрос
Можно ли сопоставить маршрут с помощью MapRoute и указать общий контроллер, например
context.MapRoute(
"Dashboard_Edit", // Route name
"dashboard/edit/{*pagePath}",
new { controller = "Dashboard`1", action = "edit", pagePath = "home" }
);
Решение
К сожалению, это не допускается при использовании фабрики контроллера по умолчанию.Тип «Dashboard`1» относится к открытому универсальному типу и не может быть создан.Другими словами, при использовании фабрики контроллеров по умолчанию единственными допустимыми значениями для «контроллера» являются те, которые могут соответствовать следующему псевдосинтаксису:
IController c = new SomeControllerType();
А SomeControllerType
должен быть действительным (но без суффикса «Контроллер» или пространства имен) и иметь конструктор без параметров.
Вы всегда можете написать собственную фабрику контроллеров, которая имеет более расширенную функциональность и понимает, как создавать универсальные типы.