NopCommerce路由:如何在NC 4.30中正确创建和利用插件路由

问题描述

我的任务是将功能从现有应用程序(经典MVC5)导入nopCommerce 4.30。目标是在实际商店页面的某个位置上具有一个按钮,该按钮重定向插件Index视图,向用户提供实际功能

这是我第一次与NC合作。阅读了整个NC文档后,我发现最好的方法是创建一个包含所需功能插件。按照在NC 4.30中创建插件的说明(参见此处),我能够创建并安装该插件

但是,我似乎无法从应用程序中打开任何(自定义插件视图。在查看NC基本文件附带的插件时,我注意到大多数插件都有一个名为RouteProvider.cs文件,其中包含路由信息。根据这些文件,我创建了自己的简单版本,并将其添加到项目中,例如(仅示例)

 public class RouteProvider : IRouteProvider
    {
        private const string ViewNameIndex = "Plugin.Misc.MyPlugin.Index";
        private const string RoutePattern = "Plugins/Index";


        /// <summary>
        /// Register routes
        /// </summary>
        /// <param name="endpointRouteBuilder">Route builder</param>
        public void RegisterRoutes(IEndpointRouteBuilder endpointRouteBuilder)
        {
            endpointRouteBuilder.MapControllerRoute(ViewNameIndex,RoutePattern,new { controller = "MyController",action = "Index" });
        }

        /// <summary>
        /// Gets a priority of route provider
        /// </summary>
        public int Priority => 0;
    }

但是,我仍然无法使用任何插件URL。

此外,我不太了解MapControllerRoute中第一个和第二个参数的用途以及它们如何影响所使用的URL。我无法从我使用的示例中推断出它们的用法,请参见。下面。 (我可以随意将ImportContactRoute中的UnsubscribeContactRouteSendinBlueDefault.cs添加到此示例中)


public class RouteProvider : IRouteProvider
    {
        private const string ImportContactsRoute => "Plugin.Misc.SendinBlue.ImportContacts";
        private const string UnsubscribeContactRoute => "Plugin.Misc.SendinBlue.Unsubscribe";

        /// <summary>
        /// Register routes
        /// </summary>
        /// <param name="endpointRouteBuilder">Route builder</param>
        public void RegisterRoutes(IEndpointRouteBuilder endpointRouteBuilder)
        {
            endpointRouteBuilder.MapControllerRoute(ImportContactsRoute,"Plugins/SendinBlue/ImportContacts",new { controller = "SendinBlue",action = "ImportContacts" });

            endpointRouteBuilder.MapControllerRoute(UnsubscribeContactRoute,"Plugins/SendinBlue/UnsubscribeWebHook",action = "UnsubscribeWebHook" });
        }

        /// <summary>
        /// Gets a priority of route provider
        /// </summary>
        public int Priority => 0;
    }

Plugin.Misc.SendinBlue.ImportContacts在这里想要匹配什么? Plugins\nop.Plugin.Misc.SendinBlue\Presentation\nop.Web\Plugins\Misc.SendinBlue\中都没有相应的文件夹。

我假设Plugins/SendinBlue/ImportContacts是指可能以URL输入的实际路由,但是在这一阶段,我仍然不确定。

有人可以解释一下我如何从应用程序内部正确创建和访问插件视图的路由,或者提供替代方法,以防万一我弄错了树。

更新 在研究解决问题的方法时,我在NC论坛上遇到了以下post。与该page链接的帖子,其中描述了三种“在nopCommerce插件显示视图的方式”:

  1. 嵌入式资源
  2. 主题覆盖
  3. 自定义视图引擎

尽管它很有价值,但您会注意到该帖子可以追溯到2013年。问题是,鉴于技术已发生变化,这种方法是否仍然有效。

我已经尝试了将View放入嵌入式资源中而无济于事的第一种方法

在这种情况下,适用于NC 4.30的正确方法是什么?

解决方法

我又给了它一个镜头,我想指出,使用方法 1.Embedded resources(参见上文)实际上是有效的。 由于对这些主题缺乏了解,我没有尝试过其他两种方法。

仍然存在一些问题,但我认为该问题已得到解答。