ASP.NET MVC 3: решение конфликта маршрута - PullRequest
0 голосов
/ 08 октября 2011

Я уже некоторое время пишу блог как учебный проект, и я просто переписал свою структуру URL, чтобы улучшить организацию своих контроллеров. Это прошло довольно гладко, но у меня есть небольшая проблема с конфликтующим маршрутом.

Я пытаюсь настроить мою структуру URL следующим образом:

/
/page/2
/category
/category/page/2

Категории хранятся в базе данных. В данный момент это работает нормально, но я только заметил, что когда я пытаюсь сделать ссылку на домашнюю страницу, вместо этого появляется /page.

Вот моя текущая таблица маршрутов:

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

    routes.MapRoute(
        "Admin",
        "admin",
        new { controller = "Admin", action = "Index" }
    );

    routes.MapRoute(
        "ShowPagedPostsByCategory",
        "{category}/page/{page}",
        new { controller = "Posts", action = "Index", page = UrlParameter.Optional },
        new { page = @"(\d+)?" }
    );

    routes.MapRoute(
        "ShowPagedPosts",
        "page/{page}",
        new { controller = "Posts", action = "Index", page = UrlParameter.Optional },
        new { page = @"(\d+)?" }
    );

    routes.MapRoute(
        "ShowPostsByCategory",
        "{category}",
        new { controller = "Posts", action = "Index" }
    );

    routes.MapRoute(
        "ShowTaggedPosts",
        "posts/tagged/{tag}",
        new { controller = "Posts", action = "ShowTaggedPosts", tag = UrlParameter.Optional }
    );

    routes.MapRoute(
        "EditDeleteComment",
        "posts/{action}/{id}",
        new { controller = "Posts" },
        new { action = @"EditComment|DeleteComment", id = @"\d+" }
    );

    routes.MapRoute(
        "AddComment",
        "{controller}/comment",
        new { controller = "Posts", action = "Comment" }
    );

    routes.MapRoute(
        "ShowPost",
        "{controller}/{PostID}/{*slug}",
        new { controller = "Posts", action = "ShowPost", slug = UrlParameter.Optional },
        new { PostID = @"\d+" }
    );

    routes.MapRoute(
        "Default",
        "{controller}/{action}/{id}",
        new { controller = "Posts", action = "Index", id = UrlParameter.Optional }
    );
}

Я вижу, в чем проблема: домашний URL-адрес '/' совпадает с маршрутом ShowPagedPosts, но перемещение его ниже маршрута по умолчанию кажется неправильным. Это заставляет меня думать, что мой подход к этому немного неправильный. Кто-нибудь может указать мне правильное направление, пожалуйста?

Редактировать: На самом деле, с RouteDebugger я вижу, что он на самом деле соответствует маршрутам ShowPagedPosts и ShowPostsByCategory.

1 Ответ

2 голосов
/ 08 октября 2011

При использовании Html.ActionLink будет использоваться первый соответствующий маршрут.

Если вы хотите использовать другой конкретный маршрут, используйте Html.RouteLink, который принимает имя маршрута в качестве параметра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...