2011-12-01 117 views
5

我有這個簡單的Web服務,現在它只是看看如果部件號是A123456789,然後它返回一個型號。這將被連接到數據庫的邏輯取代,以檢查partno,然後返回實際的型號。但在這一點上,我只需要它返回一些虛擬的JSON數據。然而,當我使用Fiddler,並期待在通話中http://localhost:PORT/Scan/Model/A123456789網絡broswer它返回REST風格的Web服務返回XML而不是JSON

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">Model: CVS-1679</string> 

但是,當我在同一個URI的小提琴手做一個GET我得到

"Model: CVS-1679" 

只有下textview選項卡。

當我將ResponseFormat設置爲JSON時,爲什麼它以XML(瀏覽器和Fiddler中的文本)而不是JSON返回?

我的代碼:

[WebGet(UriTemplate = "Model/{partno}", ResponseFormat = WebMessageFormat.Json)] 
     public string Model(string partno) 
     { 
      if (partno == "A123456789") 
      { 
       string modelno = "CVS-1679"; 
       return "Model: " + modelno; 
      } 
      else 
      { 
       string modelno = "CVS-1601"; 
       return "Model: " + modelno; 
      } 
     } 
+1

確保在向REST服務發出請求時將Content-Type設置爲application/json – Rajesh

回答

5

ASP.NET web服務返回的XML/SOAP消息。如果你想返回Json字符串,你需要用[ScriptService]屬性修飾Webservice。這通知IIS該服務將被ASP.NET AJAX調用使用。這些屬性是System.Web.Extensions的一部分。

您可以通過裝飾與ScriptMethod屬性將WebMethod定義Web方法響應格式。

[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 

但是,即使在用這些屬性裝飾webservice和webmethod之後,響應仍然可以是XML格式。此行爲發生時發出請求的客戶端不會設置請求頭的內容類型爲「應用/ JSON」。

收益從之前的WebMethod方法調用中使用招

這是很容易使用Fiddler來測試Web服務使用JavaScriptSerializer

調試WebService的序列化JSON字符串。下圖是如何調用WebService的返回一個JSON字符串的例子。請注意,請求內容類型設置爲application/json。 webserivce預期的參數在Request Body部分中列出。 enter image description here

請注意,請求內容類型設置爲application/json。

4

它以JSON如果你看一下你得到的數據的格式返回...

key: value 

或在您的情況

string Model = "CVS-1679" 

當您在fiddler中查看它時,您會看到從一個MS端點到另一個MS端點的原始序列化傳輸。序列化在.NET框架中的反序列化元素負責通過線路傳輸它,以便當您在對象端將對象返回到您的.NET應用程序中時,您會得到一個名爲Model的變量,並帶有您期望的值。

如果您嘗試發送,你會看到很多的嵌套的XML標記的整個類,但是當你在你的代碼獲得對象,你會在對象層次看一等公民。

它出現在你的瀏覽器的原因是因爲,瀏覽器不知道如何反序列化它,所以只是在默認情況下顯示文本

相關問題