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

NopCommerce routing: How to correctly create and make use of plugin routes in 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。我无法从我使用的示例中推断出它们的用法,参见。以下。 (我冒昧地将 SendinBlueDefault.cs 中的 ImportContactRouteUnsubscribeContactRoute 添加到此示例中)


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",
                new { controller = "SendinBlue", 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 输入的实际路线,但在这个阶段我再次不确定。

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

更新 在研究解决问题的方法时,我遇到了以下 post in the NC forum. The post linked to this page,它描述了三种“在 NopCommerce 插件中显示视图的方法”:

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

尽管它很有价值,但您会注意到 post 可以追溯到 2013 年。问题是考虑到技术已经发生变化,这些方法是否仍然有效。

我已经尝试了第一种将我的 View 嵌入资源的方法,但无济于事。

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

我又试了一次,我想指出使用方法 1.Embedded resources(参见上文)确实有效。 由于对这些主题缺乏了解,我还没有尝试其他两种方法。

一些问题仍然存在,但在我看来,这个问题已经得到解答。