使用ASP.Net WebAPI構建REST服務(四)——參數綁定


默認綁定方式

WebAPI把參數分成了簡單類型和復雜類型:

  • 簡單類型主要包括CLR的primitive types,(int、double、bool等),系統內置的幾個strcut類型(TimeSpan、Guid等)以及string。對於簡單類型的參數,默認從URI中獲取。
  • 復雜類型的數據也可以直接作為參數傳入進來,系統使用media-type formatter進行解析后傳給服務函數。對於復雜類型,默認從正文中獲取,

例如,對於如下函數

    HttpResponseMessage Put(int id, Product item)

其id默認從url中獲取,其item默認從正文中獲取。

 

使用 [FromUri] 標記從URI中綁定參數

我們可以使用 [FromUri] 標記強制從URI中綁定參數,例如

    public class GeoPoint
    {
        public double Latitude { get; set; }
        public double Longitude { get; set; }
    }

    public ValuesController : ApiController
    {
        public HttpResponseMessage Get([FromUri] GeoPoint location) { ... }
    }

這樣,Get參數就是從URI中獲取了。需要注意的是,此時我們必須將GeoPoint的屬性在URI中傳入: http://localhost/api/values/?Latitude=47.678558&Longitude=-122.130989 。這種默認的序列化方式比較冗長,我們也可以自定義反序列化格式為類似這樣的形式:http://localhost/api/values/?location=47.678558,-122.130989具體方法請參看參考文檔 Type Converters 的一節。

 

使用 [FromBody] 標記從正文中綁定參數

同樣,我們可以使用 [FromBody] 標記強制從正文中綁定參數,例如

    public HttpResponseMessage Post([FromBody] string name)

此時,我們則

    POST http://localhost:5076/api/values HTTP/1.1
    User-Agent: Fiddler
    Host: localhost:5076
    Content-Type: application/json
    Content-Length: 7

    "Alice"

需要注意的是這兒的Content-Type必須和正文的序列化方式一致,這兒使用的是json序列化,因此類型是application/json。系統自動使用Media Formatters將其轉換為目標對象。

 

綁定多個參數

前面介紹的方式中,只能從URI中綁定一個參數,雖然可以通過傳入復雜類型解決多參數的問題,但很多時候不如在URI中來得直接。此時,我們則可以使用前面介紹的特性路由來實現多參的綁定,例如:

    [Route("api/{controller}/{year}/{month}/{day}")]
    public string Get(int year, int month, int day)
    {
        return string.Join(",", year, month, day);
    }

 

參考文檔: http://www.asp.net/web-api/overview/formats-and-model-binding


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM