2017-01-10 38 views
3

我在我的MVC应用程序中有类似Admin/Vendor的路由。在不改变这条路线的情况下,我需要将这条路线指向另一个方法CustomAdmin/CustomVendor如何覆盖插件nopcommerce中的路由

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

原始的方法:

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

自定义方法:

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

是否要在插件中覆盖路由? –

+0

@Div yep我需要重写我的插件 – Optimus

+0

好的,你能告诉我们你的插件的RouteProvider文件! –

回答

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

在您的插件,它的类实现了接口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被overrided使用SaveGeneralSettings或任何东西directory.And必须由你的插件被替换你想使用那将是你的路线URL

+0

试过这个,但不工作 – Optimus

+0

你写了'RegisterRoutes(RouteCollection routes)'函数内部的代码部分? – gdmanandamohon

+0

是的。但仍然路由到旧的控制器行动 – Optimus