我已阅读有关此问题的每篇文章,但没有解决问题。 如果有人可以帮助我,我会很高兴。
我添加了一个带有Web服务的MVC3项目。 我只有一个名为Test的函数,当我通过HTTP GET方法(常规url)调用它时,它返回XML格式而不是JSON的数据。 如何让它返回JSON?
网络服务:
namespace TestServer
{
[WebService]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class TestWebservice : System.Web.Services.WebService
{
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
[WebMethod]
public List<string> Test()
{
return new List<string>
{
{"Test1"},
{"Test2"}
};
}
}
}
web.config(仅限相关部分):
<configuration>
<location path="TestWebservice.asmx">
<system.web>
<webServices>
<protocols>
<add name="HttpGet"/>
</protocols>
</webServices>
</system.web>
</location>
<system.web>
<webServices>
<protocols>
<clear/>
</protocols>
</webServices>
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx"
type="System.Web.Script.Services.ScriptHandlerFactory"
validate="false"/>
</httpHandlers>
</system.web>
</configuration>
网址:
http://localhost:49740/testwebservice.asmx/Test
结果(这不是我想要的):
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
<string>Test1</string>
<string>Test2</string>
</ArrayOfString>
如果有人可以帮助我,我会很高兴。
答案 0 :(得分:3)
发送请求时,您需要将内容类型HTTP标头指定为application/json
。例如,如果您使用的是jQuery AJAX,则可以执行以下操作:
$.ajax({
url: '/testwebservice.asmx/Test',
type: 'GET',
contentType: 'application/json',
success: function(result) {
alert(result.d[0]);
}
});
您还需要在[ScriptMethod]
属性上启用GET动词:
[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true)]
[WebMethod]
public List<string> Test()
{
return new List<string>
{
{"Test1"},
{"Test2"}
};
}
您还可以摆脱web.config
中有关此服务的所有内容。没有必要。
哦顺便说一句,经典的ASMX Web服务是一种过时的技术。您应该使用更新的技术,例如返回JSON,WCF的ASP.NET MVC控制器操作,甚至是最新的ASP.NET MVC 4 Web API。
答案 1 :(得分:0)
REST服务根据客户端发送的Accept标头以特定格式(XML,JSON)序列化数据。 Accept
标头向服务说明客户端可以接受的格式。
当您尝试直接从浏览器URL访问服务时,Accept
标头的值设置为某个默认值,如下所示(在Firefox中)
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
上面的标题明确表示我可以接受html,xhtml或xml。由于application/xml
格式是显式指定但不是application/json
,因此REST服务以xml格式返回数据。 (我不明白ResponseFormat = ResponseFormat.Json
的用途是什么。)
因此,如果要使服务返回JSON数据,则必须指定accept标头的相应格式。如果您使用的是jQuery,则可以使用$.getJSON()
将接受标头设置为"application/json"
,或者甚至可以将$.ajax
与dataType
一起用作json
。< / p>
http://prideparrot.com/blog/archive/2011/9/returning_json_from_wcfwebapi