2009-05-25 15 views
11

wydaje mi się uruchomić do tego błędu przez cały czas:W jaki sposób debugujesz "Brak trasy w tabeli tras odpowiada dostarczonym wartościom." w ASP.NET MVC

Brak trasy w tabeli tras odpowiada podanemu wartości.

Wystąpił nieobsługiwany wyjątek podczas wykonywania bieżącego żądania WWW. Sprawdź ślad stosu, aby uzyskać więcej informacji o błędzie i skąd pochodzi w kodzie.

Ślad stosu to tylko garść śmieci MVC.

Oczywiście pytam o nieistniejącą trasę, ale jak mogę sprawdzić, która trasa faktycznie próbowała wysłać zapytanie? Chciałbym znać rzeczywisty adres URL i metodę HTTP. Jak mogę to odkryć?

(jestem przyzwyczajony do Django gdzie próbowano URL jest częścią wyjątku i woleliby bardziej wydajny sposób niż przeglądanie źródło mojej stronie i zastanawianie go.)

Odpowiedz

8

Możesz użyć klasy narzędziowej MvcContrib 'RouteDebugger, aby uzyskać lepszy widok, która trasa obsłużyła żądanie.

Wszystko, co musisz zrobić, to dodać odwołanie do MvcContrib i dodać ten kod do Global.asax

RegisterRoutes(RouteTable.Routes); 
RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes); 
+0

Znalazłem ten artykuł Phila Haacka nieco bardziej do rzeczy. http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx –

+2

Wystąpił również problem błędu routingu "Two Consecutive Optional Parameter" w MVC 3. RouteDebugger poprawnie odnajdzie trasę jednak podczas uruchamiania aplikacji problem nadal istnieje. Zobacz artykuł: http://haacked.com/archive/2011/02/20/routing-regression-with-twoi-ivesecutive-optional-url-parameters.aspx dla rozwiązania. –

+0

@DaTribe Golly-gee. To był dokładnie mój problem. Dzięki za połączenie z tym. –

13
+2

Stephen Walther również rozmowy na temat Route Debugging w rozdziale 9 swojego nadchodzącego książki - aktualnie dostępny tutaj: http://stephenwalther.com/ blog/archiwum/2009/02/06/chapter-2-understanding-routing.aspx –

+0

Aby to działało: 1) odwołaj się do RouteDebug.dll 2) Dodaj to na końcu swojej metody Application_Start: RouteDebug.RouteDebugger.RewriteRoutesForTesting (RouteTable.Routes); 3) Radujcie się –

3

Można użyć powrócić przekierowanie ("/ Home/index") zamiast

return RedirectToAction("Home","index"); 

Albo

rozwiązanie dla mnie było przekazać w A rea w trasie wartości parametrów zmienia:

return RedirectToAction("ActionName", "ControllerName"); 

do:

return RedirectToAction("ActionName", "ControllerName", new { area = "AreaName" }) 
+0

Sytuacja była dla mnie prawie taka sama, jako trzeci parametr musiałem dodać następujący parametr: 'new {area = string.Empty})' –

Powiązane problemy