Web APi入門之移除XML格式(一)

前言

回頭想來,沒想到本身卻堅持下來了,EntityFramework系列終於所有完成了,給本身點個贊先。本系列將着手於Web API,關於一些基礎的介紹及定義就再也不敘述,請參考園友們文章,很是詳細,我也是在此基礎上步入學習的。html

簡短介紹

咱們知道Web API是基於ASP.NET平臺構建RESTful應用程序的框架(關於RESTful請參考園友Liam Wang關於其詳細介紹),經過訪問在方法標記爲HttpPost、HttpGet、HttpPut等得知。瀏覽器

問題探討

咱們知道Web API默認輸出的格式爲JSON,可是當咱們進行測試時大部分瀏覽器輸出的都是XML格式,這種狀況真是使人唏噓不已。下面咱們就以火狐爲例,同時利用它的Fire Bug進行監控。咱們利用測試數據,並進行訪問以下:服務器

爲什麼會出現如此狀況呢?

咱們利用Fire Bug查看其報文頭信息來進行分析,以下:app

由於Web API是根據檢測請求頭信息(Accept Header)來查找已經格式化註冊的響應頭信息(Content-Type)來肯定它應該返回的輸出類型。正是這種根據請求類型來響應相應類型的互動機制,使得Web API的功能變得強大,也就是說它能根據請求的透明來得到不一樣類型的輸出。

大部分瀏覽器發送的都是以下請求頭信息:框架

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Web API檢測上述信息是從左到右而且同時嘗試經過從格式化註冊的列表中去找到一個匹配它的而且支持的介質類型(meta type)。在此種狀況下,application/xml與Xml Formatter匹配上了,因此會以XML格式進行輸出並返回。

或許有些瀏覽器的可能請求信息爲以下:學習

Accept: text/html,application/xhtml+xml,*/*;q=0.9

大部分瀏覽器中這樣一樣也是以XML格式打開,可是平時以爲在兼容方面很是噁心的IE 9模式下倒是JSON,固然既然能以JSON打開確定是沒有包括application/xml了。測試

或許有些瀏覽器的可能請求信息爲以下:spa

Accept: text/html, application/xhtml+xml, */*

這更加沒必要多說了,這更加敏感的就暴露出要以XML格式輸出了。code

根本上解決方案

上述說了那麼多都是以XML格式輸出,若是在項目中須要大量的以JSON格式輸出的數據的話,那麼確定會用到Web API了,我這才入門就是以這種方式回饋我,還可以好好的玩耍嗎,看到園中大部分都是介紹大部分瀏覽器都是以XML格式輸出的,可是卻沒給出一個解決方案,我的感受有點欠妥,因而我就瞭解了下,經過上述咱們知道請求過來的請求頭信息是要和咱們註冊的格式進行匹配的並響應對應的格式,那麼咱們徹底能夠在匹配時作一點手腳將其請求過來的XML格式進行過濾不就ok了嗎,此時就要用到咱們Web API的配置文件 WebApiConfig 中的 Register 方法來進行過濾便可。orm

雖然咱們很難改變瀏覽器的請求頭信息,可是咱們能夠改變服務器的頭信息,以下:

           var formatters = config.Formatters.Where(formatter =>
                  formatter.SupportedMediaTypes.Where(media =>
                  media.MediaType.ToString() == "application/xml" || media.MediaType.ToString() == "text/html").Count() > 0) //找到請求頭信息中的介質類型
                  .ToList();

            foreach (var match in formatters)
            {
                config.Formatters.Remove(match);  //移除請求頭信息中的XML格式
            }

檢驗一下 ,輸出成功:

總結

至此Web API算是入門吧,一步步來,不着急,有問題就解決,多花點時間也是值得的,你說呢!!!

相關文章
相關標籤/搜索