2012-06-14 46 views
0

我有我的MVC的路由問題MVC路由:「多個動作ID

我試圖讓下面的網址...。」 HTTP://本地主機/ API /國家

我已經定義按以下順序以下途徑...

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」不包括「Continents」或「Regions」,那麼爲什麼它們被識別爲匹配請求。你知道嗎?這些路線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

謝謝先生!這確實是問題! –