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

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

  • новости → (X) HTML
  • news.rss → RSS
  • news.atom → ATOM

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

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

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

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

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

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