如何在插件 nopcommerce 中覆盖路由

How to override route in a plugin 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();
    }
}

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

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

此处 Plugin.Promotion.Combo 必须替换为您的插件 directory.And 使用 SaveGeneralSettings 或任何您想使用的东西将成为您的路线 url

在开发插件时。您必须将自定义路由添加到 RouteProvider.

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

看起来像:

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 应该是您的插件组名称和插件名称。

希望对您有所帮助!