2

我有兩個動作,每當我明確調用第二個動作時,第一個動作仍然被調用。我需要能夠在mysite.com/api/Awesome/GetSomeExamples寫,沒有它總是引發GetAllClasses路由,擊中錯誤的動作

public class AwesomeController : Controller 
{ 
    public IEnumerable<myClass> GetAllClasses() 
    { 
     //...some stuff 
    } 
    public IEnumerable<string> GetSomeExamples() 
    { 
     //...some stuff 
    } 
    //... also have some more actions which take in one parameter 
} 

我的路由是這樣的,但沒有工作

public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      routes.MapRoute(
       name: "ActionApi", 
       url: "api/{controller}/{action}/{id}", 
       defaults: new { id = UrlParameter.Optional } 
      ); 
      routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 
     } 

錯誤我得到:找到與請求匹配的多個操作

+0

您指定的路由是正確的。您可能在內部從一種方法到另一種方法調用該方法。請檢查GetSomeExamples中的代碼。 – Kenneth 2013-05-08 13:51:41

+0

我確實在JavaScript中調用了它,但只在某個頁面上,我刪除了(只是incase),但我仍然收到此錯誤: 發現多個匹配請求的操作 – datatest 2013-05-08 14:00:08

回答

5

您正在使用Web API。

與正常MVC操作的區別在於Web API查看HTTP謂詞以確定要調用的操作。在這種情況下,您有兩種方法,開頭Get

但是,這應該會觸發一個錯誤:

您需要的網址是:

mysite.com/api/Awesome/ 

從那裏,網絡API將調用與Get開始的方法。您需要刪除其他get方法並將其放入不同的控制器中。 Web API假設您每個http動詞都有一個動作

+0

謝謝,從來不知道Web API的行爲不同,謝謝。吮吸,我不得不把行動放在另一個控制器,因爲他們都獲得類似的數據。一個是獲取所有數據,另一個是獲取所有不同的數據。 – datatest 2013-05-08 19:25:05