asp.net asmx Web服务返回xml而不是json
为什么这个简单的Web服务拒绝将JSON返回给客户端?
这是我的客户代码:
var params = { }; $.ajax({
url: "/Services/SessionServices.asmx/HelloWorld",
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "json",
timeout: 10000,
data: JSON.stringify(params),
success: function (response) {
console.log(response);
}
});
和服务:
namespace myproject.frontend.Services{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[ScriptService]
public class SessionServices : System.Web.Services.WebService
{
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string HelloWorld()
{
return "Hello World";
}
}
}
web.config:
<configuration> <system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
</configuration>
以及响应:
<?xml version="1.0" encoding="utf-8"?><string xmlns="http://tempuri.org/">Hello World</string>
无论我做什么,响应总是以XML形式返回。如何获得Web服务以返回Json?
这是Fiddler HTTP跟踪:
REQUEST-------
POST http://myproject.local/Services/SessionServices.asmx/HelloWorld HTTP/1.1
Host: myproject.local
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Type: application/json; charset=utf-8
X-Requested-With: XMLHttpRequest
Referer: http://myproject.local/Pages/Test.aspx
Content-Length: 2
Cookie: ASP.NET_SessionId=5tvpx1ph1uiie2o1c5wzx0bz
Pragma: no-cache
Cache-Control: no-cache
{}
RESPONSE
-------
HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Tue, 19 Jun 2012 16:33:40 GMT
Content-Length: 96
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">Hello World</string>
我已经不知道现在为解决此问题而阅读了多少篇文章了。说明不完整或由于某种原因无法解决我的问题。一些更相关的内容包括(均未成功):
- ASP.NET Web服务错误地返回XML而不是JSON
- 在.net 4.0中,asmx Web服务返回xml而不是json
- http://williamsportwebdeveloper.com/cgi/wp/?p=494
- http://encosia.com/using-jquery-to-consume-aspnet-json-web-services/
- http://forums.asp.net/t/1054378.aspx
- http://jqueryplugins.info/2012/02/asp-net-web-service-returning-xml-instead-of-json/
加上其他几篇一般文章。
回答:
终于想通了。
应用代码正确无误,已发布。问题出在配置上。正确的web.config是:
<configuration> <system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.webServer>
<handlers>
<add name="ScriptHandlerFactory"
verb="*" path="*.asmx"
type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
resourceType="Unspecified" />
</handlers>
</system.webServer>
</configuration>
根据文档,从.NET
4起,不需要注册处理程序,因为它已移至machine.config。无论出于什么原因,这都不适合我。但是将注册添加到我的应用程序的web.config中可以解决此问题。
关于此问题的许多文章都指示将处理程序添加到该<system.web>
部分。这是行不通的,并且会导致其他问题。我尝试将处理程序添加到这两个部分中,这会产生一系列其他迁移错误,这些错误完全导致了我的故障排除方向。
万一它对其他人有帮助,如果我再次遇到同样的问题,请查看以下清单:
- 您是否
type: "POST"
在ajax请求中指定了? - 您是否
contentType: "application/json; charset=utf-8"
在ajax请求中指定了? - 您是否
dataType: "json"
在ajax请求中指定了? - 您的.asmx Web服务是否包含
[ScriptService]
属性? - 您的网络方法是否包含
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
属性?(即使没有此属性,我的代码也可以工作,但是很多文章说这是必需的) - 您是否已将中的添加
ScriptHandlerFactory
到web.config文件中<system.webServer><handlers>
? - 您是否已从中的web.config文件中删除了所有处理程序
<system.web><httpHandlers>
?
希望这对遇到同样问题的人有所帮助。并感谢海报的建议。
以上是 asp.net asmx Web服务返回xml而不是json 的全部内容, 来源链接: utcz.com/qa/407953.html