0

У меня возникли проблемы с моим MVC МаршрутыMVC маршрутизации: «Идентификаторы Несколько действий

Я пытаюсь добраться до следующей ссылке ...». HTTP: // локальный/апи/Страны "

я определил следующие маршруты в следующем порядке ...

RouteTable.Routes.MapHttpRoute(
     name: "Continents", 
     routeTemplate: "api/countries/Continents", 
     defaults: new { controller = "countries", Action="Continents" } 
     ); 
    RouteTable.Routes.MapHttpRoute(
     name: "CountryRegions", 
     routeTemplate: "api/countries/Regions", 
     defaults: new { controller = "countries", Action = "CountryRegions" } 
     ); 

    RouteTable.Routes.MapHttpRoute(
     name: "CountryByCodeApi", 
     routeTemplate: "api/{controller}/{countryCode}", 
     defaults: new { controller="countries", countryCode = System.Web.Http.RouteParameter.Optional } 
     ); 

Всякий раз, когда я иду к нужному URL я получаю сообщение об ошибке "были найдены несколько действий, которые соответствуют запросу ". Это имело бы смысл, если бы третий сегмент свойства routeTemplate был необязательным, но я понял, что НЕ прилагая его в фигурных скобках, чтобы он сделал нужный сегмент в целевом URL. Очевидно, что «http: // localhost/api/countries» не включает «Континенты» или «Регионы», поэтому почему они будут идентифицированы как соответствующие запросу.

Я знаю. Эти маршруты SEEM как достаточно простая вещь, но когда вы приступаете к ней, это загадочно, как RegEx!

Любые мысли?

ответ

1

Последнее определение маршрута не дает имени действия через определение маршрута и не предоставляет его по умолчанию по умолчанию. Если определение маршрута следует опустить его, а затем добавить его к значениям по умолчанию, как это:

routes.MapRoute(
    "CountryByCodeApi", 
    "api/{controller}/{countryCode}", 
    new { 
     controller="countries", 
     countryCode = RouteParameter.Optional, 
     action = "CountryCodes" 
    } 
); 

Обратите внимание, что это только последнее определение маршрута. Верхняя пара остается такой, какая есть.

public ActionResult CountryCodes(string countryCode) 
{ 
    // do whatever you please 
} 
+1

Спасибо, сэр! Это действительно проблема! –

Смежные вопросы