Mam aplikację internetową korzystającą z MVC 2 Preview 2 i po zarejestrowaniu wszystkich tras, muszę owinąć każdą trasę w dekoratorze w dalszej części łańcucha. Problem polega na tym, że w ten sposób łamie routing. Co się dzieje, to metoda GetVirtualPath będzie pasować fałszywie do innych obszarów w aplikacji (korzystam z pojedynczych obszarów projektu). Nie ma znaczenia, czy dekorator zrobi coś użytecznego, czy nie. Korzystanie z poniższego przekazu jest wszystkim, czego potrzebujesz, aby je złamać.Dlaczego trasa dekoracyjna trasy przerwać routing w ASP.NET MVC 2?
public class RouteDecorator: RouteBase
{
readonly RouteBase _route;
public RouteDecorator(RouteBase route)
{
_route = route;
}
public override RouteData GetRouteData(HttpContextBase context)
{
return _route.GetRouteData(context);
}
public override VirtualPathData GetVirtualPath(RequestContext context, RouteValueDictionary values)
{
return _route.GetVirtualPath(context, values);
}
}
Przypisuję dekoratorowi prostą pętlę po zarejestrowaniu wszystkich tras.
var routes = RouteTable.Routes;
for (var i = 0; i < routes.Count; i++)
{
routes[i] = new RouteDecorator(routes[i]);
}
Jak mogę bezpiecznie wstawić dekorator bez zrywania ścieżek i obszarów?
Mam dostępne rozwiązanie do reprodukcji to download here. W reprodukcji, dekorator trasy jest wykomentowany. Wpisanie go ponownie spowoduje przerwanie routingu, a pierwsze dane routingu obszaru dummy będą odpowiadać liniom, które normalnie będą poprawnie pasować tylko do odpowiedniej przestrzeni nazw.
Dzięki za wysiłek. Implementacja IRouteWithArea nie koryguje problemu carte blanche, ale może to doprowadzić mnie w nowym kierunku. Dziękuję Ci. –
Wygląda na to, że dekorator kończy się owijaniem trasy więcej niż jeden raz. Edytowałem swoją odpowiedź, podając kod do wdrożenia działającego rozwiązania, choć najlepiej chciałbym dowiedzieć się, dlaczego tak się dzieje, ponieważ jest to dość dziwne. –
To zdecydowanie odpowiedź na problem. Nie złapałem problemu z dekoratorem odradzania. Jest to dziwne zachowanie lub oczekiwane zachowanie z brakiem zrozumienia, dlaczego tak się dzieje. –