Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Маршруты ASP.NET MVC с расширениями файлов

Автор вопроса: Doug McCleanОтветов: 2

Я хочу сделать MVC-маршрут для списка новостей, который может подаваться в нескольких форматах.

  • новости -> (X)HTML
  • новости.rss -> RSS
  • новости.атом -> АТОМ

Возможно ли сделать это (более общая ситуация с "необязательным расширением" возникает в нескольких местах моего запланированного проекта) с одним маршрутом? Или мне нужно сделать два маршрута, как это:

routes.MapRoute("News-ImplicitFormat",
                "news",
                new { controller = "News", action = "Browse", format = "" });

routes.MapRoute("News-ExplicitFormat",
                "news.{format}"
                new { controller = "News", action = "Browse" });

Кажется, было бы полезно, чтобы система маршрутизации поддерживала что-то вроде:

routes.MapRoute("News",
                "news(.{format})?",
                new { controller = "News", action = "Browse" });

Ответы

Ответ 1 · рейтинг 12 · Doug McClean

Я сделал метод для поддержки добавления таких пар следующим образом:

public static void MapRouteWithOptionalFormat(this RouteCollection routes,
                                              string name,
                                              string url,
                                              object defaults)
{
    Route implicitRoute = routes.MapRoute(name + "-ImplicitFormat",
                                          url,
                                          defaults);
    implicitRoute.Defaults.Add("format", string.Empty);

    Route explicitRoute = routes.MapRoute(name + "-ExplicitFormat",
                                          url + ".{format}",
                                          defaults);
}

Ответ 2 · Haacked

Вы можете изучить использование ограничений, чтобы заставить это работать с обычными маршрутами.

ОБНОВЛЕНИЕ: на самом деле я неправильно понял вопрос. Другой ответ - это правильное решение на данный момент. Или создайте собственный маршрут. Мы рассматриваем идею необязательных сегментов как возможную будущую функцию.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы