Сегодня я обновил свой проект до ASP.NET 4 RTM
с помощью ASP.NET MVC 2.0 RTM
.
Раньше я использовал ASP.NET 3.5
с ASP.NET MVC 2.0 RTM
.
Некоторые из моих маршрутов не работают внезапно, и я не знаю почему. Я не уверен, изменилось ли что-то между 3.5 и 4.0 - или это была проблема регрессионного типа в 4.0 RTM. (Я никогда раньше не тестировал свое приложение с 4.0).
Мне нравится использовать Url.RouteUrl("route-name", routeParams)
, чтобы избежать двусмысленности при создании URL-адресов. Вот мое определение маршрута для страницы галереи. Я хочу, чтобы imageID
был необязательным (вы получите страницу с эскизом, если не укажете его).
// gallery id
routes.MapRoute(
"gallery-route",
"gallery/{galleryID}/{imageID}/{title}",
new { controller = "Gallery", action = "Index",
galleryID = (string) null,
imageID = (string) null,
title = (string) null}
);
В .NET 3.5 / ASP.NET 2.0 RTM / IIS7
Url.RouteUrl("gallery-route", new { galleryID = "cats"})
=> /gallery/cats
Url.RouteUrl("gallery-route", new { galleryID = "cats", imageID = "4")
=> /gallery/cats/4
Url.RouteUrl("gallery-route", new { galleryID = "cats", imageID = "4", title = "tiddles")
=> /gallery/cats/4/tiddles
В .NET 4.0 RTM / ASP.NET 2.0 RTM / IIS7
Url.RouteUrl("gallery-route", new { galleryID = "cats"})
=> null
Url.RouteUrl("gallery-route", new { galleryID = "cats", imageID = "4")
=> /gallery/cats/4
Url.RouteUrl("gallery-route", new { galleryID = "cats", imageID = "4", title = "tiddles")
=> /gallery/cats/4/tiddles
Раньше я мог указывать только galleryID
, а все остальное игнорировалось в сгенерированном URL. Но теперь похоже, что мне нужно указать все параметры до title
- или он отказывается от определения URL-адреса.
Входящие URL-адреса отлично работают для /gallery/cats
, и это правильно отображается с помощью этого правила, причем imageID
и title
оба назначены null
в моем контроллере.
Я также протестировал ВХОДЯЩИЕ маршруты с помощью http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx, и все они работают нормально.