gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 11:58:07 25 4
gpt4 key购买 nike

我正在尝试使用 jQuery 从 javascript 使用 ASMX 网络服务。当我请求 XML 时它工作正常,但我想利用 .net 的 JSON 序列化功能; (它也开始让我烦恼,这是行不通的)

网络服务的代码:

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 的回答帮助我解决了这个问题。相反,我找到了 2 篇描述此问题的文章。

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

检查 this article标题为“JSON、对象和字符串:我的天啊!”。

这里我引用:

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

Because that data parameter is a valid object literal, calling the web service this way won’t throw any JavaScript errors on the client-side. Unfortunately, it won’t have the desired result either.

fname=dave&lname=ward

This is clearly not what we want to happen. The solution is to make sure that you’re passing jQuery a string for the data parameter, like this:

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

It’s a small change in syntax, but makes all the difference. Now, jQuery will leave our JSON object alone and pass the entire string to ASP.NET for parsing on the server side.

在我的例子中,数据参数是一个大对象,所以我使用类似的东西手动将它序列化为 JSON。

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

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

Related article form the same author这可能会提供更多指导。

关于web-services - ASP.NET Web 服务错误地返回 XML 而不是 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4842020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com