Podczas próby utworzenia catch all route w MVC 4 (coś, co znalazłem kilka przykładów i na podstawie mojego kodu) zwraca błąd 404. Używam tego w IIS 7.5. To wydaje się proste rozwiązanie, więc czego mi brakuje?MVC 4 catch all route never reached
Jedna uwaga, jeśli przeniesię trasę "CatchAll" powyżej trasy "Default", to działa. Ale oczywiście wtedy żaden z innych kontrolerów nie zostanie osiągnięty.
Oto kod:
Route.Config:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
"CatchAll",
"{*dynamicRoute}",
new { controller = "CatchAll", action = "ChoosePage" }
);
Kontroler:
public class CatchAllController : Controller
{
public ActionResult ChoosePage(string dynamicRoute)
{
ViewBag.Path = dynamicRoute;
return View();
}
}
To działa dobrze. Możesz uniknąć foreach i substring, jeśli to zrobisz: 'var dynamicRoute = string.Join ("/", requestContext.RouteData.Values.Values);' –
Dobre połączenie Nathan. Minęło trochę czasu, odkąd spojrzałem na ten kod. Zawsze znajduję sposoby na ulepszenie starego kodu. To z pewnością jeden z tych czasów. Zaktualizowałem odpowiedź, podając Twoją sugestię. Dzięki! – gsxrboy73
SO jest na to świetny, uczę się czegoś prawie za każdym razem, kiedy tu przyjeżdżam. Ten kod był świetny, próbowałem dowiedzieć się, czy chcę to obsłużyć w kontrolerze bazowym, ale przekazanie go do fabryki kontrolerów to lepszy pomysł! –