首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nopcommerce RegisterRoutes

Nopcommerce RegisterRoutes
EN

Stack Overflow用户
提问于 2015-12-10 21:09:23
回答 4查看 648关注 0票数 0

嗨,我在插件中的路由有问题,在nopcommerce 3.6

我在文件夹控制器中有包含方法ImportProductInfo()的TestPohodaController.cs

这是我的RegisterRoutes:

代码语言:javascript
复制
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的网址从经济系统调用这个控制器。你能帮帮我吗?谢谢。

EN

回答 4

Stack Overflow用户

发布于 2015-12-10 21:56:53

ASP.NET路由从上到下评估路由。因此,如果两个路由匹配,则它命中的第一个路由(离RegisterRoutes方法的“顶部”更近的那个)将优先于随后的路由。

考虑到这一点,您需要做两件事来解决您的问题:

您的默认路由应位于底部。如果您的路由包含相同数量的线段,则需要对它们进行约束:

example.com/1和

到解析器的example.com/index,它们包含相同数量的段,并且没有区别,所以它将命中列表中匹配的第一个路由。

要解决这个问题,您应该确保使用ProductIds的路由采用约束:

代码语言:javascript
复制
routes.MapRoute(
"TestRoute",
"{id}",
new { controller = "Product", action = "Index3", id = UrlParameter.Optional },
new { id = @"\d+" } //one or more digits only, no alphabetical characters
);
票数 0
EN

Stack Overflow用户

发布于 2015-12-11 00:44:26

  • 您不需要从路由url的插件开始。遵循这种模式就足够了,{controller}/{Action}/{parameter}
  • Make还要确保控制器的名称空间是正确的,正如您在路由中定义的那样。Nop.Plugin.Test.Pohoda.Controllers
  • You也可以定义一个可选的productId参数。所以它将适用于mypage/TestPohoda/ImportProductInfo,或者mypage/TestPohoda/ImportProductInfo/123
  • You也可以设置高于0的优先级,这是nop.web中默认的路由提供者的优先级。这样你就可以确保你的插件首先读取它。实际上,这并不是必需的,因为您有特定的url。仅当您具有类似的路由url

时才需要此选项

尝试使用此路线

代码语言:javascript
复制
 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;
                }
            }
        }
    }
票数 0
EN

Stack Overflow用户

发布于 2018-06-27 13:53:30

我们将看看如何注册插件路由。MVC路由负责将传入的浏览器请求映射到特定的ASP.NET控制器操作。您可以在此处找到有关路由的更多信息。因此,请遵循以下步骤:

如果您需要添加一些自定义路由,则创建RouteProvider.cs文件。它通知nopCommerce系统有关插件路由的信息。例如,下面的RouteProvider类添加了一个新路由,可以通过打开web浏览器并导航到http://www.yourStore.com/Plugins/PaymentPayPalStandard/PDTHandler URL (由PayPal插件使用)来访问该路由:

代码语言:javascript
复制
 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;
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34202759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档