2014-12-02 167 views
1

這個問題突然間在我腦海中浮現出來。Web API 2默認路由方案

Startup.cs我:

HttpConfiguration config = new HttpConfiguration(); 
config.MapHttpAttributeRoutes(); 
app.UseWebApi(config); 

當我有這樣一個方法:

[RoutePrefix("api/Order")] 
public class OrderController : ApiController 
{ 
    // don't use any attribute here 
    public IHttpActionResult HelloWorld() 
    { 
     ... 
     return Ok(); 
    } 
} 

  1. 是否有可能訪問HelloWorld()
  2. 應該GET還是POST或其他什麼動作被髮送?

回答

1

如果將方法重命名爲:GetHelloWorld(),則可以使用GET訪問HttpWorld()。 與POST重命名爲PostHelloWorld()相同。

但我更喜歡使用[HttpGet][HttpPost],...屬性,即使我的操作方法在名稱中包含「Get」或「Post」字符,以避免可能的錯誤。

更新

做一些測試後,我意識到,我的有關意見是不可能的調用HelloWorld的是不正確的。 事實上,如果您對http://<YourProjectUrl>/order進行POST調用,則可以調用您的HelloWorld()方法。

因此,默認方法是POST,因爲您沒有爲您的操作方法配置任何Route(考慮到RoutePrefix僅僅是一個前綴,所以需要考慮Route屬性),它會得到您的控制器名稱沒有「控制器」(OrderController - > Order)。

+0

絕對同意。我只是想知道沒有重命名方法名稱和添加屬性會發生什麼,如上述場景中所示。 – 2014-12-03 03:48:06

+0

@AldourCheng我不知道我是否瞭解你。如果添加屬性,它將按預期工作:[HttpGet]將允許GET,[HttpPost]將允許POST,而與方法名無關。 – 2014-12-03 09:29:28

+0

雅我明白,但我問的是,沒有修改我的問題中提供的代碼片段中的任何內容,'HelloWorld()'接受什麼路由和操作? – 2014-12-03 10:17:03