嗨,我在插件中的路由有问题,在nopcommerce 3.6
我在文件夹控制器中有包含方法ImportProductInfo()的TestPohodaController.cs
这是我的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的网址从经济系统调用这个控制器。你能帮帮我吗?谢谢。
发布于 2015-12-10 21:56:53
ASP.NET路由从上到下评估路由。因此,如果两个路由匹配,则它命中的第一个路由(离RegisterRoutes方法的“顶部”更近的那个)将优先于随后的路由。
考虑到这一点,您需要做两件事来解决您的问题:
您的默认路由应位于底部。如果您的路由包含相同数量的线段,则需要对它们进行约束:
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
);发布于 2015-12-11 00:44:26
时才需要此选项
尝试使用此路线
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;
}
}
}
}发布于 2018-06-27 13:53:30
我们将看看如何注册插件路由。MVC路由负责将传入的浏览器请求映射到特定的ASP.NET控制器操作。您可以在此处找到有关路由的更多信息。因此,请遵循以下步骤:
如果您需要添加一些自定义路由,则创建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;
}
}
}https://stackoverflow.com/questions/34202759
复制相似问题