Удалите маршрут из RouteCollection в Asp.Net Core и добавьте новый с тем же именем маршрута (nopCommerce-4.00) - PullRequest
0 голосов
/ 29 июня 2018

Я хочу удалить существующий маршрут из RouteCollection и хочу добавить новый маршрут с тем же именем маршрута в nopCommerce 4.00 через плагин

Имя существующего маршрута:

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

Хочу заменить его на

   routeBuilder.MapLocalizedRoute("HomePage", "",
    new { controller = "CustomPage", action = "Homepage" });

Я пробовал несколько способов, но не получилось.

1 Ответ

0 голосов
/ 05 июля 2018

В моем случае я должен заменить поколение 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
}

После этого я создаю 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" }
        );
    }
}

Вот и все.

После этой реализации маршрутизация работает нормально, и запрос get попал в мой собственный контроллер, который действует как оригинал.

Теперь я могу заменить логику генерации своей.

Надеюсь, это поможет.

...