ASP.NET Web 服务错误地返回 XML 而不是 JSON

2024-04-02

我正在尝试使用 jQuery 从 javascript 使用 ASMX Web 服务。当我要求 XML 时它工作得很好,但我想利用 .net 的 JSON 序列化功能; (这也开始让我烦恼,这不起作用)

Web 服务的代码:

using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Web.Script.Services;

[WebService()]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class SimpleService : WebService
{
    [WebMethod]
    public String GetString()
    {
        return "value";
    }
}

客户端的代码:

$.ajax({
  type: "POST",
  url: "SimpleService.asmx/GetString",
  data: "{}",
  contentType: "application/json; charset=utf-8",
  dataType: "json"
});

以及回应...

Content-Type: text/xml; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET

<?xml version="1.0" encoding="utf-8"?><string xmlns="http://tempuri.org/">value</string>

请求总是成功,但 jQuery 给我一个解析器错误(毫不奇怪,考虑到响应)。

我已经无计可施了。我尝试添加 ServiceMethod 属性,并将 ResponseType 设置为 JSON,但似乎没有任何效果。

我也不想使用 .NET ScriptManager javascript 生成器,所以请不要建议使用它们。


SO 上没有答案帮助我解决这个问题。相反,我找到了两篇描述这个问题的文章。

jQuery 不会将请求数据编码为 JSON,而是编码为查询字符串。这会导致 ASP.NET 忽略Accept标头并使用 XML 进行响应。

Check 本文 http://encosia.com/3-mistakes-to-avoid-when-using-jquery-with-aspnet-ajax/标题为“JSON、对象和字符串:天哪!”。

这里我引用一下:


$.ajax({
    type: "POST",
    url: "WebService.asmx/WebMethodName",
    data: {'fname':'dave', 'lname':'ward'},
    contentType: "application/json; charset=utf-8",
    dataType: "json"
});  

由于该数据参数是有效的对象文字,因此以这种方式调用 Web 服务不会在客户端引发任何 JavaScript 错误。不幸的是,它也不会达到预期的结果。

fname=dave&lname=ward

这显然不是我们希望发生的事情。解决方案是确保向 jQuery 传递数据参数的字符串,如下所示:


$.ajax({
    type: "POST",
    url: "WebService.asmx/WebMethodName",
    data: "{'fname':'dave', 'lname':'ward'}",
    contentType: "application/json; charset=utf-8",
    dataType: "json"
   });  

这只是语法上的一个小变化,但却带来了很大的不同。现在,jQuery 将保留我们的 JSON 对象,并将整个字符串传递给 ASP.NET,以便在服务器端进行解析。

就我而言,数据参数是一个大对象,因此我使用类似的方法将其手动序列化为 JSON。

data: JSON.stringify({'fname':'dave', 'lname':'ward'}),

从 jQuery 查询时让 ASP.NET ScriptService 返回 JSON 非常棘手,代码中的许多参数可能会使其抛出 XML 而不是 JSON。您应该阅读各种 SO Q/A 以使自己满意。

相关文章来自同一作者 http://encosia.com/using-jquery-to-consume-aspnet-json-web-services/这可能会提供更多指导。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET Web 服务错误地返回 XML 而不是 JSON 的相关文章

随机推荐