3

我有一個視頻控制器和它裏面有2種方法如下所示:的Web API路由問題

[Route("api/Video/{id:int}")]  
public Video GetVideoByID(int id){ do something}  

[Route("api/Video/{id}")]  
public Video GetVideoByTitle(string id) {do something} 

的WebApiConfig.cs是這樣的:

public const string DEFAULT_ROUTE_NAME = "MyDefaultRoute"; 
    public static void Register(HttpConfiguration config) 
    { 
     config.Routes.MapHttpRoute(
      name: DEFAULT_ROUTE_NAME, 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

    } 
} 

所以,當我註釋掉任何一種方法,另一種方法起作用,就像你完全評論第一種方法,第二種方法可行,但兩者在實施時都不起作用。我使用了空的Web API模板。

因此,爲什麼會發生這種情況的任何想法都會很好。

+0

你可以嘗試像 「ID_STR」,而不是 「ID」 在GetVideoByTitle,讓我知道? – 2014-10-02 07:37:53

+0

我不認爲這隻適用於參數的不同名稱,即使更改參數的數量也無濟於事。是不可能改變路線來區分兩者。也許看看ActionAttributes將其標記爲不同。 – Schwarzie2478 2014-10-02 07:46:19

+0

@ user3036757你是否真的想要在一個'頁面'上的多個提交按鈕每個都去一個不同的動作? – 2014-10-02 08:04:59

回答

4

您必須啓用路由屬性在配置期間呼叫MapHttpAttributeRoutes

例子:

public static void Register(HttpConfiguration config) 
{ 
    // Web API routes 
    config.MapHttpAttributeRoutes(); 
    ... 
} 

我測試過它,對我來說工作正常:

http://localhostapi/Video/1 // goes for the first method 
http://localhostapi/Video/foo // goes for the second method