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