嗨我在插件中的路线有问题,在nopcommerce 3.6
我在文件夹中控制器TestPohodaController.cs包含方法ImportProductInfo()
有我的RegisterRoutes:
namespace Nop.Plugin.Test.Pohoda
{
public partial class RouteProvider : IRouteProvider
{
public void RegisterRoutes(RouteCollection routes)
{
routes.MapRoute("Plugin.Test.Pohoda.ImportProductInfo",
"Plugins/TestPohoda/ImportProductInfo",
new { controller = "TestPohoda", action = "ImportProductInfo" },
new[] { "Nop.Plugin.Test.Pohoda.Controllers" }
);
}
public int Priority
{
get
{
return 0;
}
}
}
}
安装到nopCommerce是可以的,但是当我去mypage / Plugins / TestPohoda / ImportProductInfo页面时返回404.
我需要TestPohodaController的url来从经济系统调用这个控制器。你能帮我吗?感谢。
答案 0 :(得分:0)
ASP.NET MVC Routing评估从上到下的路由。因此,如果两条路线匹配,则它击中的第一条路线(靠近RegisterRoutes方法的顶部和#39;的路线)将优先于后续路线。
考虑到这一点,您需要做两件事来解决问题:
您的默认路线应位于底部。 如果路由包含相同数量的段,则需要对它们进行约束: 以下是什么区别:
example.com/1 和
example.com/index 对于解析器,它们包含相同数量的段,并且没有区别符,因此它将匹配列表中匹配的第一个路径。
要解决此问题,您应确保使用ProductIds的路由采用约束:
routes.MapRoute(
"TestRoute",
"{id}",
new { controller = "Product", action = "Index3", id = UrlParameter.Optional },
new { id = @"\d+" } //one or more digits only, no alphabetical characters
);
答案 1 :(得分:0)
尝试使用此路线
namespace Nop.Plugin.Test.Pohoda
{
public partial class RouteProvider : IRouteProvider
{
public void RegisterRoutes(RouteCollection routes)
{
routes.MapRoute("Plugin.Test.Pohoda.ImportProductInfo",
"TestPohoda/ImportProductInfo/{productId}",
new { controller = "TestPohoda", action = "ImportProductInfo" , productId = = UrlParameter.Optional },
new[] { "Nop.Plugin.Test.Pohoda.Controllers" }
);
}
public int Priority
{
get
{
return 1;
}
}
}
}
答案 2 :(得分:0)
我们将看看如何注册插件路由。 ASP.NET路由负责将传入的浏览器请求映射到特定的MVC控制器操作。您可以在此处找到有关路由的更多信息。因此,请按照以下步骤操作:
如果需要添加一些自定义路由,请创建RouteProvider.cs文件。它通知nopCommerce系统有关插件的路由。例如,以下RouteProvider类添加了一个新路由,可通过打开Web浏览器并导航到http://www.yourStore.com/Plugins/PaymentPayPalStandard/PDTHandler URL(由PayPal插件使用)来访问该路由:
public partial class RouteProvider : IRouteProvider
{
public void RegisterRoutes(IRouteBuilder routeBuilder)
{
routeBuilder.MapRoute("Plugin.Payments.PayPalStandard.PDTHandler", "Plugins/PaymentPayPalStandard/PDTHandler",
new { controller = "PaymentPayPalStandard", action = "PDTHandler" });
}
public int Priority
{
get
{
return -1;
}
}
}
答案 3 :(得分:0)
可能是缓存问题,请尝试重新启动IIS 实际上,默认情况下您不必注册路由,您可以调用您的方法 / TestPohoda / ImportProductInfo