RESTful Web服务返回XML而不是JSON

atr*_*joe 5 c# asp.net rest wcf json

我有这个简单的Web服务,现在它只是查看部件号是否为A123456789然后它返回一个型号.这将被连接到数据库以检查partno的逻辑所取代,然后返回实际的型号.但此时我只需要它返回一些虚拟JSON数据.然而,当我使用Fiddler并查看http:// localhost:PORT/Scan/Model/A123456789的web broswer中的调用时,它返回此

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">Model: CVS-1679</string>
Run Code Online (Sandbox Code Playgroud)

但是当我在同一个URI的fiddler中进行GET时,我得到了

"Model: CVS-1679"
Run Code Online (Sandbox Code Playgroud)

仅在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;
            }
        }
Run Code Online (Sandbox Code Playgroud)

Ami*_*rma 5

ASP.NET webservice默认返回XML/SOAP消息.如果要返回Json字符串,则需要使用[ScriptService]属性修饰Webservice.这告诉IIS,ASP.NET AJAX调用将使用此服务.这些属性是System.Web.Extensions的一部分.

您可以通过使用ScriptMethod属性修改web方法来定义Web方法响应格式.

[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
Run Code Online (Sandbox Code Playgroud)

但是,即使在通过这些属性修改webservice和webmethod之后,响应仍然可以是XML格式.当发出请求的客户端未将Request Header内容类型设置为"application/json"时,会发生此行为.

在使用JavaScriptSerializer将方法调用从webmethod serialize返回到Json字符串之前

使用Fiddler调试WebService

使用fiddler测试webservice非常容易.下图是如何调用返回json字符串的Webservice的示例.请注意,请求内容类型设置为application/json.webserivce期望的参数在Request Body部分中进行了测量.在此输入图像描述

请注意,请求内容类型设置为application/json.