Как установить страницу по умолчанию в приложении MVC?

Я хотел бы, чтобы мой базовый URL-адрес перешел в определенную категорию интернет-магазина (онлайн-магазин NopCommerce, если это имеет значение). URL категории: http://myUrl.com/c/6

После прочтения нескольких сообщений, включая сообщение Scott Gutherie о маршрутизации MVC, я подумал, что могу просто добавить следующий код в файл Global.ascx.cs:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        //register custom routes (plugins, etc)
        var routePublisher = EngineContext.Current.Resolve<IRoutePublisher>();
        routePublisher.RegisterRoutes(routes);

        routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Catalog", action = "Category", id = 6 },
                new[] { "Nop.Web.Controllers" }
        );
    }

Но это, похоже, не сработало. Как я могу выполнить то, что я пытаюсь сделать?

У меня мало опыта работы с MVC, поэтому я приношу свои извинения, если это не имеет смысла.

Ответ 1

выглядит как наиболее интересные биты в исходном коде nopcommerce. маршрут по умолчанию зарегистрирован как

    routes.MapLocalizedRoute("HomePage",
                    "",
                    new { controller = "Home", action = "Index"},
                    new[] { "Nop.Web.Controllers" });

в основном вы хотите сначала зарегистрировать свой маршрут по умолчанию, перед комментарием //register custom routes. должен выглядеть следующим образом:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Catalog", action = "Category", id = 6 },
            new[] { "Nop.Web.Controllers" }
    );

    routes.MapRoute(
        "CustomHome", // Route name
        "", // URL with parameters
        new { controller = "Catalog", action = "Category", id = 6 },
        new[] { "Nop.Web.Controllers" }
    );

    //register custom routes (plugins, etc)
    var routePublisher = EngineContext.Current.Resolve<IRoutePublisher>();
    routePublisher.RegisterRoutes(routes);


}

первый маршрут может даже не понадобиться. я не уверен. никогда не работал с nopcommerce.

Ответ 2

Чтобы избежать каких-либо конфликтов с обновлениями в NopCommerce, я хотел бы создать новый RouteProvider.cs внутри моей папки темы, как это:

~/Themes/MyTheme/Infrastructure/RouteProvider.cs

Затем введите этот код внутри:

namespace Nop.Web.Themes.MyTheme.Infrastructure
{
public class RouteProvider : IRouteProvider
{
    public void RegisterRoutes(RouteCollection routes)
    {
        routes.MapLocalizedRoute("CustomHome",
                        "",
                        new { controller = "Catalog", action = "Category", Id = 6 },
                        new[] { "Nop.Web.Controllers" });

    }

    public int Priority
    {
        get
        {
            return 10;
        }
    }
}

Ответ 3

Вы пробовали:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.MapRoute(
            "Default", // Route name
            "Catalog/Category/6"
    );
}

Ответ 4

Попробуйте просто написать это в методе RegisterRoutes

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Catalog", action = "Category", id = 6 } // Parameter defaults
        );

    }

он должен установить вашу страницу по умолчанию из /Catalog/Category/ 6

Я не понимаю, зачем вы пишете эту строку new[] { "Nop.Web.Controllers" }