近日將asp.net webapi 升級為rc版,突然發現之前beta版開發的程序不能正常工作了,用httpclient調用webapi時,action的參數總是空,無法獲取傳入的值,查閱了官方的論壇發現下面的帖子,http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx
rc版的webapi參數綁定器分為兩種:
1.Model Binding
2.Formatters
其中Model Binding僅從url中取值,這點是與mvc的model binding有區別的,
formatters是從request的body中取值,並且是把整個body作為一個(不可為多個)對象解析為一個參數。
webapi是如何從這兩種方式選擇呢?
1.默認情況下是根據參數的類型,如果參數為簡單類型(字符串、整數、浮點、時間類型等),則使用model binding,如果是復雜類型(自定義的類,包括一個或多個字段)等,則用formatters
2.可以給參數加上[FromBody]屬性,則使用formatters
3.可以給參數加上[ModelBinder]屬性,則使用model binding,而且可以此屬性允許你指定用自定義的綁定器,也可以使用[FromUri]屬性來使用model binding
4.特別注意一點,一個action上,只能有一個參數使用formatters,否則會在運行時拋出異常