0

내 MVC 경로에 문제가 있어요MVC 라우팅 : "여러 액션 IDS

나는 다음 URL을 얻기 위해 노력하고 ...."에 http : // localhost를/API/나라 "

나는 내가 오류를 얻고 원하는 URL로 이동 할 때마다 "여러 행동이 발견되었다

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 } 
     ); 

다음과 같은 순서로 다음과 같은 노선 ... 요청을 일치 정의했다고 ". routeTemplate 속성의 세 번째 세그먼트가 선택 사항이라면이 점이 의미가 있습니다. 중괄호로 둘러싸 지 않아서 내 이해가됩니다. 대상 URL에 이 필요합니다. 세그먼트가 필요합니다. 분명히 "http : // localhost/api/countries"에는 "Continents"또는 "Regions"가 없으므로 요청과 일치하는 것으로 확인되는 이유는 무엇입니까?

예. 알아요. 이 루트는 간단하고 충분히 좋아 보이지만 당신이 내려갈 때 RegEx 's처럼 비밀 스럽습니다 !!!

의견이 있으십니까?

답변

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

고맙습니다! 그것은 참으로 문제가되었습니다! –