Routes 覆盖nopcommerce beta 4.3版中的通用路由
我正在为nopcommerce beta 4.3编写一个插件,并试图覆盖一个通用路由(类别/段塞)。应用程序被移动到.NETCore3.x,因此路由现在驻留在中间件中,处理方式与以前不同。我已尝试覆盖Nop.Web.Infrastructure.GenericUrlRouteProvider和Nop.Web.Framework.Mvc.Routing.SlugRouteTransformer,如下所示Routes 覆盖nopcommerce beta 4.3版中的通用路由,routes,middleware,nopcommerce,intercept,Routes,Middleware,Nopcommerce,Intercept,我正在为nopcommerce beta 4.3编写一个插件,并试图覆盖一个通用路由(类别/段塞)。应用程序被移动到.NETCore3.x,因此路由现在驻留在中间件中,处理方式与以前不同。我已尝试覆盖Nop.Web.Infrastructure.GenericUrlRouteProvider和Nop.Web.Framework.Mvc.Routing.SlugRouteTransformer,如下所示 public partial class GenericUrlRouteProviderExt
public partial class GenericUrlRouteProviderExt : IRouteProvider
{
#region Methods
/// <summary>
/// Register routes
/// </summary>
/// <param name="endpointRouteBuilder">Route builder</param>
public void RegisterRoutes(IEndpointRouteBuilder endpointRouteBuilder)
{
var pattern = "{SeName}";
if (DataSettingsManager.DatabaseIsInstalled)
{
var localizationSettings = endpointRouteBuilder.ServiceProvider.GetRequiredService<LocalizationSettings>();
if (localizationSettings.SeoFriendlyUrlsForLanguagesEnabled)
{
var langservice = endpointRouteBuilder.ServiceProvider.GetRequiredService<ILanguageService>();
var languages = langservice.GetAllLanguages().ToList();
pattern = "{language:lang=" + languages.FirstOrDefault().UniqueSeoCode + "}/{SeName}";
}
}
endpointRouteBuilder.MapDynamicControllerRoute<SlugRouteTransformerExt>(pattern);
endpointRouteBuilder.MapControllerRoute("WineCategory", pattern,
new { controller = "Wine", action = "WineCategory" });
}
#endregion
#region Properties
/// <summary>
/// Gets a priority of route provider
/// </summary>
/// <remarks>
/// it should be the last route. we do not set it to -int.MaxValue so it could be overridden (if required)
/// </remarks>
public int Priority => 1000;
/// <summary>
/// Gets the order value of endpoint.
/// </summary>
/// <remarks>
/// The order value provides absolute control over the priority
/// of an endpoint. Endpoints with a lower numeric value of order have higher priority.
/// </remarks>
public int Order => 1;
#endregion
}
有人对此进行了调查并找到了解决方案吗?我没有阅读您发布的所有代码,但如果我理解正确,您只是想劫持路线 看看
Nop.Web.Infrastructure.GenericUrlRouteProvider.RegisterRoutes()
,这里定义了类别/段塞路由
在插件中,您只需定义一个实现IRouteProvider的类,其优先级大于-1000000(GenericUrlRouteProvider使用的优先级)
例如:
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.DependencyInjection;
using Nop.Core.Domain.Localization;
using Nop.Data;
using Nop.Services.Localization;
using Nop.Web.Framework.Mvc.Routing;
using System.Linq;
namespace Namespace
{
public class RouteProvider : IRouteProvider
{
/// <summary>
/// Register routes
/// </summary>
/// <param name="endpointRouteBuilder">Route builder</param>
public void RegisterRoutes(IEndpointRouteBuilder endpointRouteBuilder)
{
var pattern = "{SeName}";
if (DataSettingsManager.DatabaseIsInstalled)
{
var localizationSettings = endpointRouteBuilder.ServiceProvider.GetRequiredService<LocalizationSettings>();
if (localizationSettings.SeoFriendlyUrlsForLanguagesEnabled)
{
var langservice = endpointRouteBuilder.ServiceProvider.GetRequiredService<ILanguageService>();
var languages = langservice.GetAllLanguages().ToList();
pattern = "{language:lang=" + languages.FirstOrDefault().UniqueSeoCode + "}/{SeName}";
}
}
endpointRouteBuilder.MapControllerRoute("overriden_Category", pattern, new { controller = "OverridenCatalog", action = "Category" });
}
/// <summary>
/// Gets a priority of route provider
/// </summary>
public int Priority => 0;
}
}
使用Microsoft.AspNetCore.Builder;
使用Microsoft.AspNetCore.Routing;
使用Microsoft.Extensions.DependencyInjection;
使用Nop.Core.Domain.Localization;
使用Nop.数据;
使用Nop.Services.Localization;
使用Nop.Web.Framework.Mvc.Routing;
使用System.Linq;
名称空间
{
公共类RouteProvider:IRouteProvider
{
///
///登记路线
///
///路线生成器
公共无效注册表项(IEndpointRouteBuilder endpointRouteBuilder)
{
var pattern=“{SeName}”;
如果(DataSettingManager.DatabaseIsInstalled)
{
var localizationSettings=endpointRouteBuilder.ServiceProvider.GetRequiredService();
if(本地化设置.SeoFriendlyUrlsForLanguagesEnabled)
{
var langservice=endpointRouteBuilder.ServiceProvider.GetRequiredService();
var languages=langservice.GetAllLanguages().ToList();
pattern=“{language:lang=“+languages.FirstOrDefault().UniqueSeoCode+”}/{SeName}”;
}
}
endpointRouteBuilder.MapControllerRoute(“覆盖的_类别”,模式,新的{controller=“覆盖的目录”,action=“类别”});
}
///
///获取路由提供程序的优先级
///
公共int优先级=>0;
}
}
更改此选项以指向正确的控制器/操作
public void Configure(IApplicationBuilder application)
{
//our custom middleware
application.Use(async (context, next) =>
{
await next();
});
}
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.DependencyInjection;
using Nop.Core.Domain.Localization;
using Nop.Data;
using Nop.Services.Localization;
using Nop.Web.Framework.Mvc.Routing;
using System.Linq;
namespace Namespace
{
public class RouteProvider : IRouteProvider
{
/// <summary>
/// Register routes
/// </summary>
/// <param name="endpointRouteBuilder">Route builder</param>
public void RegisterRoutes(IEndpointRouteBuilder endpointRouteBuilder)
{
var pattern = "{SeName}";
if (DataSettingsManager.DatabaseIsInstalled)
{
var localizationSettings = endpointRouteBuilder.ServiceProvider.GetRequiredService<LocalizationSettings>();
if (localizationSettings.SeoFriendlyUrlsForLanguagesEnabled)
{
var langservice = endpointRouteBuilder.ServiceProvider.GetRequiredService<ILanguageService>();
var languages = langservice.GetAllLanguages().ToList();
pattern = "{language:lang=" + languages.FirstOrDefault().UniqueSeoCode + "}/{SeName}";
}
}
endpointRouteBuilder.MapControllerRoute("overriden_Category", pattern, new { controller = "OverridenCatalog", action = "Category" });
}
/// <summary>
/// Gets a priority of route provider
/// </summary>
public int Priority => 0;
}
}