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来从经济系统调用这个控制器。你能帮我吗?谢谢

Nopcommerce RegisterRoutes

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