如何在插件nopcommerce中覆盖路由

问题描述 投票:3回答:2

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

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

原始方法:

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

自定义方法:

public class CustomAdminController
{
    [Route("Admin/Vendor")]
    public ActionResult CustomVendor()
    {
        return View();
    }
}
plugins asp.net-mvc-5 routing nopcommerce
2个回答
2
投票

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

在默认情况下,nopCommerce AdminControllerVendor不存在,所以我假设你试图覆盖admin的供应商列表方法。

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
投票

在你的插件中哪个类实现了接口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或任何你想要使用的东西,这将是你的路线网址

© www.soinside.com 2019 - 2024. All rights reserved.