Пользовательский маршрут iroutehandler
-
08-10-2019 - |
Вопрос
У меня есть пользовательский artehancandler в ASP.NET MVC2, чтобы поймать все URL на префиксельном пути, как это:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Add(new Route("@api/{*all}", new ApiHandler()));
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
Маршрутизация работает нормально, но если я использую HTML.ActionLink или возврату возврата () из контроллера, URI построен создает сломанный URI, как это:
/@api?action=Add&controller=Home
вместо
/Home/Add
Как я могу повлиять на логику здания URI, чтобы рассмотреть шаблон маршрута по умолчанию?
Решение
Я придумал взлом, чтобы остановить описанное поведение. Хотя это «решает» проблему, это действительно неприятно, и я бы предпочел более чистый способ исключить маршрут из логики здания виртуального пути
routes.Add(
new Route("@api/{*all}",
// A random and unlikely controller name as the default
new RouteValueDictionary() { { "controller", "qwewqewqeqweq" } },
// and a constraint requiring any controller to be that random, default value
new RouteValueDictionary() { { "controller", "qwewqewqeqweq" } },
new ApiHandler()
);
Это означает, что маршрут будет выбран только для здания виртуального пути, если рассматриваемый контроллер был «QWewQewqeqweq», который надеюсь, что вряд ли. Я сказал, что это противно.
Другие советы
Вы можете указать имя маршрута, используя RouteLink
помощник:
<%: Html.RouteLink("link text", "Default",
new { action = "add", controller = "home" }) %>