从Asp.Net Core中的RouteCollection中删除路由,并添加具有相同路由名称的新路由(nopCommerce-4.00)

Raj*_*iya 1 routes route-provider asp.net-core asp.net-core-2.0 nopcommerce-4.0

我想从RouteCollection中删除现有路线,并想通过插件在nopCommerce 4.00中添加具有相同路线名称的新路线

现有路线名称:

//home page
            routeBuilder.MapLocalizedRoute("HomePage", "",
        new { controller = "Home", action = "Index" });
Run Code Online (Sandbox Code Playgroud)

我想用替换

   routeBuilder.MapLocalizedRoute("HomePage", "",
    new { controller = "CustomPage", action = "Homepage" });
Run Code Online (Sandbox Code Playgroud)

我尝试了几种方法,但没有任何运气。

Ant*_*ván 5

就我而言,我必须替换robots.txt一代人。我在插件中创建了一个新的公共控制器,然后将原始操作复制到此处:

public class MiscCommonController : BasePublicController
{
    #region Fields
    private readonly ICommonModelFactory _commonModelFactory;
    #endregion Fields

    #region Ctor
    public MiscCommonController(
        ICommonModelFactory commonModelFactory
        )
    {
        this._commonModelFactory = commonModelFactory;
    }
    #endregion Ctor

    #region Methods
    //robots.txt file
    //available even when a store is closed
    [CheckAccessClosedStore(true)]
    //available even when navigation is not allowed
    [CheckAccessPublicStore(true)]
    public virtual IActionResult RobotsTextFile()
    {
        var robotsFileContent = _commonModelFactory.PrepareRobotsTextFile();
        return Content(robotsFileContent, MimeTypes.TextPlain);
    }
    #endregion Methods
}
Run Code Online (Sandbox Code Playgroud)

之后,我RouteProvider为插件创建了一个,然后将原始路由替换为自己的路由。

public partial class RouteProvider : IRouteProvider
{
    /// <summary>
    /// Gets a priority of route provider
    /// </summary>
    public int Priority => -1;

    /// <summary>
    /// Register routes
    /// </summary>
    /// <param name="routeBuilder">Route builder</param>
    public void RegisterRoutes(IRouteBuilder routeBuilder)
    {
        Route route = null;

        foreach (Route item in routeBuilder.Routes)
        {
            if (item.Name == "robots.txt")
            {
                route = item;
                break;
            }
        }

        if (route != null) routeBuilder.Routes.Remove(route);

        routeBuilder.MapRoute(
            "robots.txt",
            "robots.txt",
            new { controller = "MiscCommon", action = "RobotsTextFile" }
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

就这样。

完成此实现后,路由工作正常,并且get请求到达了我自己的控制器中,这就像原始控制器一样。

现在,我可以用自己的逻辑替换生成逻辑。

希望对您有所帮助。