2013-04-30 107 views
4

所以這真的讓我很頭疼。Asp.net Web API:控制器上沒有發現任何操作

路線:

  config.routes.MapHttpRoute(
      name: 'ControllerAction' , 
      routeTemplate: "api/{controller}/{action}" 
     ); 

控制器:

public class LookupsController : ApiControllerBase 
{ 
    [ActionName("all")] 
    public Lookups GetLookups() 
    { 
     var lookups = new Lookups 
     { 
      Customers = GetCustomers().ToList(), 
      //add more 
     }; 
     return lookups; 
    } 

} 

但whenver我試着打了URI:/ API /查詢/所有 我得到一個404錯誤說:

「在控制器'Lookups'上找不到與「all」名稱匹配的操作。「

任何幫助,將不勝感激

編輯: 所以我想通了最後。這是因爲錯誤的依賴。 VS2012將action解析爲system.web.mvc.actionname屬性,而我需要的是system.web.http.actionnameattribute。

奇怪的問題,無論如何,我希望這可以幫助別人。

+0

@jakli,它確實幫了我:)非常感謝。 – Chandermani 2013-09-25 14:29:21

回答

1

雅立,

編輯:

要重命名的控制器,但沒有指定的方法。 WebApi從前綴GET,PUT,DELETE,POST中解析該方法。因此,該方法屬性必須被放置在行動的簽名:

試試這個,很適合我:

public class LookupsController : ApiControllerBase 
{ 
    [HttpGet()] 
    [ActionName("All")] 
    public Lookups GetLookups() 
    { 
     var lookups = new Lookups 
     { 
      Customers = GetCustomers().ToList(), 
      //add more 
     }; 
     return lookups; 
    } 

}

routes.MapHttpRoute(
name: "ActionApi", 
routeTemplate: "api/{controller}/{action}/{id}", 
defaults: new { id = RouteParameter.Optional } 

);

到這裏看看,瞭解更多有關路由:

Routing in ASP.NET Web API

希望其幫助你!

+0

所以我嘗試了這種方式,並保持得到,httpget不包含一個構造函數,它需要1個參數。但是,謝謝你的提示 – jakli 2013-04-30 13:38:46

+0

嘿@jakli,看起來你正在使用比我自己更早的版本!我改變了posto到另一個aproach,看看,並告訴它是否爲你的工作!它的作品在我這裏很好! :) – Fals 2013-04-30 13:49:41

相關問題