ASP.NET Web API 如何通过程序控制返回xml还是json

雖然 ASP.NET Web API 內建支援 JSON 與 XML 兩種輸出格式,並依據瀏覽器端送出的 Accept 標頭自動決定回應的內容格式,不過有時候我們的確也需要讓程式來控制要回應哪種格式,本文將介紹如何讓 ASP.NET Web API 自訂回應結果格式 (XML 或 JSON),以方便透過其他方法來決定如何回應訊息格式。

我們先來看看 ASP.NET MVC 4 專案範本幫我們產生預設 API 裡的 Get() 方法,程式碼非常簡單:

  1. // GET api/values  
  2. public IEnumerable<</span>string> Get()  
  3. {  
  4.     return new string[] { "value1", "value2" };  
  5. }  

如果我們要自訂回應格式的話,那麼 API 的回傳型別必須改成 HttpResponseMessage 才行,並透過以下程式碼做到自訂切換回應格式的動作:

  1. // GET api/values  
  2. public HttpResponseMessage Get(string output = null)  
  3. {  
  4.     var data = new string[] { "value1", "value2" };  
  5.   
  6.     var resp = new HttpResponseMessage(HttpStatusCode.OK);  
  7.   
  8.     if (output == "xml")  
  9.     {  
  10.         resp.Content = new ObjectContent<string>(data, new XmlMediaTypeFormatter());  
  11.     }  
  12.     else  
  13.     {  
  14.         resp.Content = new ObjectContent<string>(data, new JsonMediaTypeFormatter());  
  15.     }  
  16.   
  17.     return resp;  
  18. }  

這段程式碼我大概解釋一下:

  • 第 2 行:透過 ASP.NET MVC 的模型繫結機制取得 Query String 上的 output 參數
  • 第 6 行:建立 HttpResponseMessage 物件,並指定 HTTP 回傳狀態為 200 (OK)
  • 第 8 ~ 15 行:自訂回應內容的程式碼,我們要透過 ObjectContent 型別傳入一個泛型參數來建立內容物件,而這個泛型參數就是在修改之前 Get() 方法的回傳型別 IEnumerable<<font color="#0000ff">string>,傳入的第一個參數是要輸出的資料,第二個參數則是輸出格式,這時你就可以選擇輸出 XmlMediaTypeFormatter 還是 JsonMediaTypeFormatter 了。

             if (output == "xml")
            {
                resp.Content = new StringContent(data.ToString(), System.Text.Encoding.GetEncoding("UTF-8"), "application/xml");   //XmlMediaTypeFormatter
            }
            else
            {
                resp.Content = new StringContent(data.ToString(), System.Text.Encoding.GetEncoding("UTF-8"), "application/json");   //JsonMediaTypeFormatter
            }

如果要對該 API 進行測試,可以輸入以下網址路徑:

  • /api/values?output=xml
  • /api/values?output=json
  • 参考:http://blog.sina.com.cn/s/blog_60ba16ed0102v290.html
posted @ 2016-10-12 13:54  jimcsharp  阅读(572)  评论(0编辑  收藏  举报