问题描述
我的任务是将功能从现有应用程序(经典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
中的UnsubscribeContactRoute
和SendinBlueDefault.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插件中显示视图的方式”:
尽管它很有价值,但您会注意到该帖子可以追溯到2013年。问题是,鉴于技术已发生变化,这种方法是否仍然有效。
我已经尝试了将View
放入嵌入式资源中而无济于事的第一种方法。
解决方法
我又给了它一个镜头,我想指出,使用方法
1.Embedded resources
(参见上文)实际上是有效的。
由于对这些主题缺乏了解,我没有尝试过其他两种方法。
仍然存在一些问题,但我认为该问题已得到解答。