Asp.net
是否有應用於 Web API ApiController 方法的預設動詞?
我一直在查看本文中的程式碼(在https://github.com/patelsan/WebAPIAuthentication中):http: //www.codeproject.com/Articles/630986/Cross-Platform-Authentication-With-ASP- NET-Web-API。
它非常好,似乎工作正常。解釋這種令牌身份驗證的文章很少,但這是我見過的最好的。請注意,我是這項技術的新手,還有很多東西要學。
所以,我注意到 UsersController 有這個程式碼:
public class UsersController : ApiController { public Status Authenticate(User user) { . . . } }該
Authenticate方法不以已知的 HTTP 動詞開頭,例如 Get 或 Post,並且沒有$$ HttpGet $$要麼$$ HttpPost $$與該方法關聯的屬性,那麼控制器如何知道該方法與哪個動詞關聯呢?僅通過查看程式碼,我如何知道我需要使用哪個動詞?如果沒有匹配項,是否存在“預設”動詞之類的東西? 順便說一句,如果您想知道,唯一有效的動詞是 POST。我很想知道為什麼會這樣。
將其歸檔在每天學習新事物下!
通常方法名稱匹配是這樣考慮的。然而,查看 WebAPI 原始碼,有一個用於回退的邏輯分支。如果方法名稱未映射(通過屬性或約定)到受支持的 HTTP 動詞,則預設為 POST。
預設情況下,動作選擇是通過
ReflectedHttpActionDescriptor類發生的。這裡的重要方法是GetSupportedHttpMethods()。在相關部分,程式碼如下:if (supportedHttpMethods.Count == 0) { // Use POST as the default HttpMethod supportedHttpMethods.Add(HttpMethod.Post); }您可以在此處查看完整原始碼(在文件中間附近)。