簡體   English   中英

api控制器如何知道不帶注釋的調用方法

[英]How does the api controller know which method to call without the annotation

我最近才剛開始使用asp.net Web API控制器。

我通過ajax調用這些控制器方法,但是默認情況下,當我使用EF創建Web api控制器時,這些控制器方法都沒有上面的屬性,例如:

  • [HttpGet]
  • [HttpPost]
  • [HttpPut]
  • [HttpDelete]

相反,它們都在它們之上:

[ResponseType(typeof(ModelName))]

但是,控制器方法名稱在方法名稱中確實具有這些注釋,例如:

  • GetModelName()
  • PostModelName()
  • PutModelName()
  • DeleteModelName()

因此,當我將方法類型放入例如對“刪除”的ajax調用中時..是否通過其中包含單詞“ Delete”的方法名稱進行某種名稱識別? 如果不是,那么api控制器如何知道沒有屬性的調用方法?

文檔中

為了找到該動作,Web API首先查看HTTP方法,然后尋找其名稱以該HTTP方法名稱開頭的動作。

因此基本上是基於約定的。

是。 Microsoft文檔

為了找到該動作,Web API首先查看HTTP方法,然后尋找其名稱以該HTTP方法名稱開頭的動作。 例如,對於GET請求,Web API查找以“ Get ...”開頭的動作,例如“ GetContact”或“ GetAllContacts”。 此約定僅適用於GET,POST,PUT和DELETE方法。 您可以通過使用控制器上的屬性來啟用其他HTTP方法。

我需要澄清答案,因為基於注釋的方法聲明是可用的! 最常見的錯誤是“為什么[HttpGet]/[ActionName]/[Route]在ApiController上不起作用”是using System.Web.Http;的名稱空間using System.Web.Http; using System.Web.Mvc; 非常棘手!!!

如果您using System.Web.Mvc;在ApiController中找到using System.Web.Mvc; ,則[HttpGet]/[ActionName]/[Route]將是MVC版本,不會在WebApiConfig.cs注冊。

因此,請確保您正在using System.Web.Http; 在ApiController中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM