Nopcommerce RegisterRoutes

时间:2015-12-10 13:09:23

标签: c# nopcommerce

嗨我在插件中的路线有问题,在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来从经济系统调用这个控制器。你能帮我吗?感谢。

4 个答案:

答案 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)

  • 您无需从路径网址的插件开始。这就够了 遵循此模式{controller} / {Action} / {parameter}
  • 确保控制器的命名空间在您定义时也是正确的 在路由中。 Nop.Plugin.Test.Pohoda.Controllers
  • 您也可以定义可选的productId参数。所以它会 为mypage工作/ TestPohoda / ImportProductInfo或 我的空间/ TestPohoda / ImportProductInfo / 123
  • 您还可以设置优先级高于0的优先级 nop.web中的默认routeprovider。这样你确保你的 插件首先读取它。事实上,没有必要像你一样 具体网址。只有在您有类似的路线网址
  • 时才需要这样做

尝试使用此路线

 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