zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    文件上传漏洞全面渗透姿势总结
    注册frpc为windows服务,可在未登录用户时启动
    SpringIOC 容器注入方式
    如何交换 Integer 的值?
    分布式websocket服务器
    win10安装Hbase2.3.0
    hadoop常用的命令
    win10安装kafka 2.122.8.1
    win10激活码
    win10 flume source为spooldir,输出到hdfs
  • 原文地址:https://www.cnblogs.com/jimcsharp/p/JSON.html
Copyright © 2011-2022 走看看