Я обновил свой проект до 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, и все они работают нормально.