Nopcommerce RegisterRoutes
本文关键字:RegisterRoutes Nopcommerce | 更新日期: 2023-09-27 18:26:17
嗨,我在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来从经济系统调用这个控制器。你能帮我吗?谢谢
ASP.NET MVC路由从上到下评估路由。因此,如果两个路由匹配,它命中的第一个路由(靠近RegisterRoutes方法"顶部"的路由)将优先于下一个路由。
考虑到这一点,你需要做两件事来解决你的问题:
您的默认路线应该在底部。如果管线包含相同数量的管段,则需要对其进行约束:有什么区别
example.com/1和
example.com/index对于解析器来说,它们包含相同数量的段,并且没有区分符,因此它将命中列表中第一个匹配的路由。
要解决这个问题,您应该确保使用ProductId的路由受到约束:
routes.MapRoute(
"TestRoute",
"{id}",
new { controller = "Product", action = "Index3", id = UrlParameter.Optional },
new { id = @"'d+" } //one or more digits only, no alphabetical characters
);
- 你不需要为你的路线url从插件开始。够了遵循此模式{controller}/{Action}/}parameter
- 在定义时还要确保控制器的命名空间是正确的在路由中。没有。插头。测试。欧姆达。控制器
- 您还可以定义一个可选的productId参数。所以它会为mypage/TestPohoda/ImportProductInfo或mypage/TestPohoda/ImportProductInfo/123
- 您也可以将优先级设置为高于0,这是nop.web中的默认routeprovider。通过这种方式,您可以确保插件首先读取它。事实上,这并不像你那样必要特定url。只有当你有类似的路由url时,这才是必需的
尝试使用此路线
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;
}
}
}
}
我们将了解如何注册插件路由。ASP.NET路由负责将传入的浏览器请求映射到特定的MVC控制器操作。您可以在此处找到有关路由的更多信息。因此,请遵循以下步骤:
如果您需要添加一些自定义路由,请创建RouteProvider.cs文件。它向nopCommerce系统通知插件路由。例如,以下RouteProvider类添加了一条新路由,可以通过打开web浏览器并导航到http://www.yourStore.com/Plugins/PaymentPayPalStandard/PDTHandlerURL(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;
}
}
}
可能是缓存问题,请尝试重新启动IIS实际上,您不必注册路由,默认情况下您可以调用您的方法/TestPohoda/ImportProductInfo