首先请记住,我是 nop/mvc 的新手,尽管我尽了最大的努力,但无法找到解决这个看似简单的任务的方法。
我一直在为我正在制作的插件定义自定义路由,到目前为止一切正常。我定义的任何路线都没有问题(例如,我为“/Dealerlocator”和“Dealer/List”设置了路线)
问题来自这样一个事实,即已经为“/ Admin”定义了一个区域,所以当我尝试为“Admin/Dealer”之类的东西设置自定义路由时,据我所知,我的路由正在被解决区域而不是我的自定义路由。看起来我的控制器永远无法到达,因为它与区域路由使用的名称空间不同,并且我收到“找不到资源。”错误。
所以我想要发生的是,当我转到“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 类中完成的所有工作。也许有一种方法可以将我的路线的优先级设置得更高,所以它是第一个解决的?谢谢。