Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Routes 覆盖nopcommerce beta 4.3版中的通用路由_Routes_Middleware_Nopcommerce_Intercept - Fatal编程技术网

Routes 覆盖nopcommerce beta 4.3版中的通用路由

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

我正在为nopcommerce beta 4.3编写一个插件,并试图覆盖一个通用路由(类别/段塞)。应用程序被移动到.NETCore3.x,因此路由现在驻留在中间件中,处理方式与以前不同。我已尝试覆盖Nop.Web.Infrastructure.GenericUrlRouteProvider和Nop.Web.Framework.Mvc.Routing.SlugRouteTransformer,如下所示

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;
    }
}