2008-08-27 9 views
10

Chciałbym zignorować wiele tras wieloznacznych. Z ASP.NET MVC podglądu 4, są dostarczane z:Routing Asp.Net: Jak ignorować wiele tras wieloznacznych?

RouteTable.Routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

Chciałbym również dodać coś takiego:

RouteTable.Routes.IgnoreRoute("Content/{*pathInfo}"); 

ale to wydaje się łamać niektóre z pomocników, które generują adresy URL w moim program. Myśli?

Odpowiedz

13

Istnieją tu dwa możliwe rozwiązania.

  1. Dodaj ograniczenie do trasy ignorowania, aby upewnić się, że tylko żądania, które powinny zostać zignorowane, będą pasować do tej trasy. Kinda kludgy, ale powinno działać.

  2. Co zawiera katalog? Domyślnie Routing nie trasuje plików znajdujących się na dysku (faktycznie sprawdza VirtualPathProvider). Więc jeśli umieszczasz statyczną zawartość w katalogu zawartości, możesz nie potrzebować trasy ignorowania.

5

Może to być dość trudne.

Podczas próby ustalenia sposobu mapowania danych trasy na trasę, system obecnie wyszukuje z góry na dół, aż znajdzie coś, co zawiera wszystkie wymagane informacje, a następnie umieszcza wszystko inne w parametrach zapytania.

Ponieważ wymagana informacja dla trasy "Treść/{* ścieżkaInformacji}" jest w pełni spełniona zawsze (brak wymaganych danych na tej trasie) i znajduje się w górnej części listy tras, a następnie wszystkie twoje próby mapowania do nienazwanych tras dopasuje ten wzorzec, a wszystkie URL-e będą oparte na tym ("Treść? action = foo & controller = bar")

Niestety, nie ma sposobu obejścia tego z trasami akcji. Jeśli używasz nazwanych tras (np. Wybierając Html.RouteLink zamiast Html.ActionLink), możesz podać nazwę trasy do dopasowania. Jest to mniej wygodne, ale bardziej precyzyjne.

IMO, skomplikowane trasy sprawiają, że system trasowania akcji w zasadzie przewraca się. W aplikacjach, w których mam coś innego niż domyślne trasy, prawie zawsze kończę powrót do generowania adresu URL opartego na określonej trasie, aby upewnić się, że zawsze otrzymuję właściwą trasę.