При попытке создать захват всего маршрута в MVC 4 (что-то я нашел несколько примеров и основал мой код), он возвращает ошибку 404. Я запускаю это на IIS 7.5. Это похоже на прямое решение, и что мне не хватает?MVC 4 поймать весь маршрут, который никогда не был достигнут
Одно замечание, если я переведу маршрут «CatchAll» выше маршрута «По умолчанию», он работает. Но, конечно же, никто из других контроллеров не достигнут.
Вот код:
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" }
);
Контроллер:
public class CatchAllController : Controller
{
public ActionResult ChoosePage(string dynamicRoute)
{
ViewBag.Path = dynamicRoute;
return View();
}
}
Это хорошо работает. Вы можете избежать foreach и подстроки, если вы это сделаете: 'var dynamicRoute = string.Join ("/", requestContext.RouteData.Values.Values);' –
Хорошо назовите Натана. Некоторое время назад я посмотрел на этот код. Я всегда нахожу способы улучшить старый код. Это, безусловно, один из тех времен. Я обновил ответ с вашим предложением. Благодаря! – gsxrboy73
SO отлично подходит для этого, я узнаю что-то почти каждый раз, когда я прихожу сюда. Этот код был отличным, я пытался понять, хочу ли я обращаться с этим в базовом контроллере, но его продвижение на фабрику контроллеров - это лучшая идея! –