C# 无商业登记处

C# 无商业登记处,c#,nopcommerce,C#,Nopcommerce,嗨,我在nopcommerce 3.6的插件中遇到了路由问题 我有一个文件夹控制器TestPohodaController.cs包含ImportProductInfo()方法 这是我的注册表: namespace Nop.Plugin.Test.Pohoda { public partial class RouteProvider : IRouteProvider { public void RegisterRoutes(RouteCollection route

嗨,我在nopcommerce 3.6的插件中遇到了路由问题

我有一个文件夹控制器TestPohodaController.cs包含ImportProductInfo()方法

这是我的注册表:

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}
  • 还请确保控制器的命名空间在定义时是正确的 在路由中。Nop.Plugin.Test.Pohoda.Controllers
  • 您还可以定义可选的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浏览器并导航到URL(由PayPal插件使用)来访问该路由:


可能是缓存问题,请尝试重新启动IIS 实际上,您不必注册路由。默认情况下,您可以调用您的方法
/TestPohoda/ImportProductInfo

他已经在使用特定的url,这将与默认路由中的任何其他url不匹配。你的回答完全不相关。我只是给他举个例子。你是在回答他的问题(你应该阅读SO的条款和条件),而你的回答甚至都不正确。您定义的路由完全错误,因为您没有定义任何url,只有一个可选参数。这个平台是为了帮助人们就他们的具体问题找到解决方案。不要用虚假或无关的信息误导他们。你也给了我否决票,因为我给了你公平的否决票。这甚至不是道德。你在这里的目的不应该仅仅是获得一些额外的分数,而是帮助人们。展示你的控制器。如果您使用的是自定义视图引擎,那么请确保提供正确的视图路径,或者在操作结果方法
返回视图(“~/Plugins/Your_Plugin_Name/Views/TestPohoda/ImportProductInfo.cshtml”)中像这样返回视图的完整路径
 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;
        }
    }
}