asp.net-mvc-3 – Asp.Net MVC 3 – 映射已属于某个区域的单独路由

首先请记住,我是nop / mvc的新手,尽管我付出了最大的努力但却找不到解决这个看似简单的任务的方法.

我一直在为我正在制作的插件定义自定义路线,到目前为止它一直很顺利.我定义的任何路由都没有问题(例如,我为“/ Dealerlocator”和“Dealerlocator”设置了路由)

问题来自于已经为“/ Admin”定义了一个区域,因此当我尝试为“管理员/经销商”设置自定义路线时,我可以告诉我的路线正在通过区域而不是我的自定义路径.看起来我的控制器永远不会到达,因为它位于不同的命名空间,然后是区域路由使用的命名空间,并且我得到“无法找到资源.”错误.

所以我想要发生的是当我去“管理员/经销商”时,它忽略了这个原因中区域中设置的路线,并使用我在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类中完成的所有工作.也许有一种方法可以将我的路线的优先级设置得更高,这是第一个解决的问题?谢谢.

最佳答案 我前段时间也遇到过这个问题,它与路由优先级有关.
This post helped me alot.

关于你的评论 – 没有理由你不能这样做,但另外,你可能有更多运气定义你的路线;

context.MapRoute(
  "DealerAdminDefault",
  "Dealer/Admin/{action}/{id}",
  new { controller = "DealerAdmin", action = "Index", id = UrlParameters.Optional }
);

希望这可以帮助,

马特

点赞