RESTful Web服务返回XML而不是JSON
我有这个简单的Web服务,现在它只是查看部件号是否为A123456789然后它返回一个型号。 这将由将连接到数据库以检查partno的逻辑替换,然后返回实际的型号。 但此时我只需要它返回一些虚拟JSON数据。 然而,当我使用Fiddler并查看http:// localhost:PORT / Scan / Model / A123456789的web broswer中的调用时,它返回此
Model: CVS-1679
但是当我在同一个URI的fiddler中进行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; } }
ASP.NET webservice默认返回XML / SOAP消息。 如果要返回Json字符串,则需要使用[ScriptService]属性修饰Webservice。 这告诉IIS,ASP.NET AJAX调用将使用此服务。 这些属性是System.Web.Extensions的一部分。
您可以通过使用ScriptMethod属性修饰web方法来定义Web方法响应格式。
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
但是,即使在通过这些属性修改webservice和webmethod之后,响应仍然可以是XML格式。 当发出请求的客户端未将Request Header内容类型设置为“application / json”时,会发生此行为。
在使用JavaScriptSerializer将方法调用从webmethod serialize返回到Json字符串之前
使用Fiddler调试WebService
使用fiddler测试webservice非常容易。 下图是如何调用返回json字符串的Webservice的示例。 请注意,请求内容类型设置为application / json。 webserivce期望的参数在Request Body部分中进行了测量。
请注意,请求内容类型设置为application / json。
如果你看一下你得到的数据的格式,它将在Json中返回…
key: value
或者在你的情况下
string Model = "CVS-1679"
当您在fiddler中查看它时,您会看到从一个MS端点到另一个MS端点的原始序列化传输。 .NET框架中的序列化和反序列化元素负责通过线路传输它,因此当您将对象返回到调用端的.NET应用程序时,您将获得一个名为Model的变量,其中包含您期望的值。
如果您尝试发送整个类,您将看到许多嵌套的XML标记,但是当您在代码中获得该对象时,您将在对象层次结构中看到第一类公民。
它出现在浏览器中的原因是,浏览器不知道如何对其进行反序列化,因此只显示文本