如何在插件nopcommerce中覆盖路由

时间:2017-01-10 12:30:17

标签: plugins asp.net-mvc-5 routing nopcommerce

我的MVC应用程序中有Admin/Vendor之类的路由。在不改变这条路线的情况下,我需要将同一路线指向另一种方法CustomAdmin/CustomVendor

我尝试了属性路由,但没有运气。有没有办法做到这一点。我目前的代码如下:

原始方法:

public class AdminController
{
   public ActionResult Vendor()
    {
        return View();
    }
}

自定义方法:

public class CustomAdminController
{
    [Route("Admin/Vendor")]
    public ActionResult CustomVendor()
    {
        return View();
    }
}

2 个答案:

答案 0 :(得分:2)

正在开发插件。您必须将自定义路线添加到RouteProvider

默认情况下,nopCommerce AdminControllerVendor不存在,因此我假设您尝试覆盖管理员的供应商列表方法。

enter image description here

看起来像:

public partial class RouteProvider : IRouteProvider
{
    public void RegisterRoutes(RouteCollection routes)
    { 
        var route = routes.MapRoute("Plugin.GroupName.PluginName.CustomVendor",
                                     "Admin/Vendor/List",
                                      new { controller = "CustomAdminController", action = "CustomVendor", orderIds = UrlParameter.Optional, area = "Admin" },
                                      new[] { "Nop.Plugin.GroupName.PluginName.Controllers" });
        route.DataTokens.Add("area", "admin");
        routes.Remove(route);
        routes.Insert(0, route);
    }
    public int Priority
    {
        get
        {
            return 100; // route priority 
        }
    }
}

旁注:GroupNamePluginName应该是您的插件组名称和插件名称。

希望这有帮助!

答案 1 :(得分:1)

在您的插件中,哪个类实现了接口IRouteProvider,您可以轻松覆盖那里的路由。 同样地,我的插件中有一个名为RouteProvider的类,所以我已经实现了abstract函数RegisterRoutes,只是它可以被

覆盖
routes.MapRoute("Plugin.Promotion.Combo.SaveGeneralSettings",
                 "Admin/Vendor",
                 new { controller = "CustomAdmin", action = "CustomVendor", },
                 new[] { "Nop.Plugin.Promotion.Combo.Controllers" }
            );

此处Plugin.Promotion.Combo必须替换为您的插件目录。并使用SaveGeneralSettings或您要使用的任何内容将是您的路线网址