Прежде всего, помните, что я новичок в nop / mvc, и, несмотря на все мои усилия, не могу найти решения этой, казалось бы, простой задачи.
Я определяю собственные маршруты для плагина, который я создаю, и до сих пор все шло хорошо. Любые определенные мной маршруты работали без проблем (например, я установил маршруты для «/ Dealerlocator» и «Dealer / List»)
Проблема связана с тем, что уже существует область, определенная для '/ Admin ", поэтому, когда я пытаюсь установить собственный маршрут для чего-то вроде" Admin / Dealer ", из того, что я могу сказать, мой маршрут разрешается областью, а не моим пользовательским маршрутом. Похоже, что мой контроллер никогда не достигается, так как он находится в другом пространстве имен, отличном от того, которое использует маршрут области, и я получаю ошибку «Не удается найти ресурс».
Итак, я хотел бы, чтобы, когда я перешел к «Администратор / Дилер», он игнорировал маршрут, заданный в области по этой единственной причине, и использовал маршрут, который я определил в классе RouteProvider.
Было предложено использовать DataTokens, чтобы решить эту проблему. Однако я не могу заставить их работать.
Код маршрутизации моего плагина:
public partial class RouteProvider : IRouteProvider
{
public void RegisterRoutes(RouteCollection routes)
{
var route = routes.MapRoute(
"Nop.Plugin.Misc.DealersAdmin",
"Admin/Dealer",
new { controller = "DealerAdmin", action = "Index" },
new[] { "Nop.Plugin.Misc.Dealers.Controllers" }
);
route.DataTokens.Add("Area", "Admin");
}
}
Маршрутизация в админке Nopcommerce:
public class AdminAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "Admin";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", area = "Admin", id = "" },
new[] { "Nop.Admin.Controllers" }
);
}
}
Я попытался установить условие регистрации области, чтобы оно не совпадало, если контроллер называется «Дилер», и это, похоже, работает. Но я не могу изменить класс AdminAreaRegistration, так как он является частью базовой платформы nop. Я хотел бы видеть всю работу, проделанную в классе RouteProvider. Может быть, есть способ установить приоритет на моем маршруте выше, чтобы он был разрешен первым? Спасибо.