Раньше я не использовал .NET Routing. У меня есть URL: http://myurl.com/Account/Login/?IsIPA=true
. Я хочу получить доступ к этому URL с помощью следующего: http://myurl.com/IPA
Это единственный пользовательский маршрут, по которому я хочу попасть.
Могу ли я создать маршрут только для одного такого URL?
Мой код, который не работает:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute("IPA", "Account/Login/{IsIPA}", new { controller = "Account", action = "Login", IsIPA = "true" });
}
Я получаю сообщение об ошибке:
Запись ограничения
IsIPA
на маршруте с шаблоном маршрутаAccount/Login/{IsIPA}=True
должна иметь строковое значение или иметь тип, реализующийSystem.Web.Routing.IRouteConstraint
.
2 ответа
Сопоставление маршрутов похоже на оператор switch case. Параметр url
, а также любые значения и ограничения по умолчанию рассматриваются для определения того, соответствует ли он входящему URL-адресу. Если маршрут совпадает, он создаст словарь значений маршрута на основе конфигурации. Если маршрут не совпадает, пробуется следующий маршрут в коллекции, пока совпадение не будет найдено (или не найдено).
Это означает, что порядок указания маршрутов важен. Маршрут по умолчанию соответствует любому URL с 0, 1, 2 или 3 сегментами. Поэтому в большинстве случаев вам нужно будет определить свой собственный маршрут до маршрута по умолчанию.
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "IPA",
url: "IPA",
defaults: new { controller = "Account", action = "Login", IsIPA = "true" });
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
Приведенная выше конфигурация направит http://myurl.com/IPA
к контроллеру с именем Account
и методу действия с именем Login
и передаст дополнительный ключ маршрута IsIPA
. Этот же URL-адрес будет создан для комбинации Контроллер / Действие / IsIPA, потому что он является первым, совпадающим в списке.
Обратите внимание, что исходный URL http://myurl.com/Account/Login/?IsIPA=true
будет по-прежнему работать и по-прежнему направлять в то же место. Эта конфигурация просто добавляет дополнительный маршрут к этому ресурсу.
Не тестируя, думаю, вы этого хотите:
routes.MapRoute("IPA", "Account/Login/{IsIPA}",
new { controller = "Account", action = "Login", IsIPA = "true"});
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.