2013-12-13 50 views
1

所以我有2個控制器:如何設置控制器的默認操作?

[AllowCrossSiteJson] 
public class ItemController : ApiController { 
    [HttpGet] 
    public LinkedList<Object> FindItem([FromUri]ItemQuery query) { 
     .... 
    } 
} 

而且

[AllowCrossSiteJson] 
public class SubDepController : ApiController 
{ 

    [HttpGet] 
    public LinkedList<Object> FindSubDep(string ID) { 
     .... 
    } 
} 

這裏是事,我打電話都:

http://localhost:43751/api/SubDep 

http://localhost:43751/api/Item 

和項目控制工作,但是SubDep確實不行!這是爲什麼?

這裏是我的WebApiConfig:

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

我回來的錯誤是這樣的:

{"Message":"No HTTP resource was found that matches the request URI 'http://localhost:43751/api/SubDep'.","MessageDetail":"No action was found on the controller 'SubDep' that matches the request."} 

獎金的問題:

如何ASP.NET MVC知道我嘗試點擊:

http://localhost:43751/api/Item 

它會自動進入FindItem Action?這對我來說就像純粹的魔術!

回答

1

當您嘗試調用FindSubDep行動,您的查詢字符串應該像belwo:

http://localhost:43751/api/SubDep/1 
+0

你是完全正確的,這就是原因。我使參數是可選的,它正確地調用了該函數。 – Bill

1

對於獎金問題。它得到正確的行動,因爲在你的情況下,HTTP動詞[GET],當你做出

http://localhost:43751/api/Item 

一個GET請求將找到項目控制器[HTTPGET]屬性的作用。

+0

非常酷!從來沒有想過這個。 – Bill

相關問題