【问题标题】:NopCommerce routing: How to correctly create and make use of plugin routes in NC 4.30NopCommerce 路由:如何在 NC 4.30 中正确创建和使用插件路由
【发布时间】:2020-08-14 09:19:02
【问题描述】:

我的任务是将现有应用程序(经典 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 输入的实际路由,但我现在还不确定。

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

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

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

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

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

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

【问题讨论】:

    标签: c# routes asp.net-core-mvc nopcommerce


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-05-24
      • 2019-05-30
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 2021-07-06
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      相关资源
      最近更新 更多