gpt4 book ai didi

c# - ASMX 网络服务不返回 JSON,只能使用 application/x-www-form-urlencoded contentType 进行 POST

转载 作者:太空狗 更新时间:2023-10-29 19:44:43 25 4
gpt4 key购买 nike

如果 contentType = "application/x-www-form-urlencoded; charset=utf-8",我可以使用 jQuery 调用我的网络服务

然而,这将返回 xml:<string>[myjson]</string>

如果我尝试使用“application/json; charset=utf-8”向服务发送消息,我会收到一个 500 错误,其中包含空的 StackTrace 和 ExceptionType。我的网络服务功能从未被击中,所以我不太确定如何调试这种情况。

我的方法和类用适当的属性修饰,并设置为使用 JSON 作为它们的响应类型(我的 wsdl 和 disco 文件也是如此)。我在 web.config 中安装了 Ajax 扩展和所需的条目。

这是在 SharePoint 场上,但我不确定这会产生太大的影响。我在所有 WFE 上部署了 web.config 更改并安装了 ajax 扩展。该服务再次运行,它只接受默认内容类型。

不知道我在这里错过了什么,伙计们......

我的 ajax 调用:

$.ajax({
type: "POST",
url: "/_vti_bin/calendar.asmx/Test",
dataType: "json",
data: "{}",
contentType: "application/json; charset=UTF-8",
success: function(msg){
alert(msg);
},
error: function(xhr, msg){ alert(msg + '\n' + xhr.responseText); }
});

我的网络服务类:

[WebService(Namespace = "http://namespace")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService()]
public class CalendarService : WebService
{
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string Test()
{
return "Hello World";
}
}

最佳答案

我使用 web 服务在 2.0 中工作,但我已经对 .d 进行了保护(请参阅下面的 dataFilter)。我还返回了一个对象数组。注意:该对象的类是静态的,否则它至少对我来说不能正常工作。

  $.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
data: "{}",
dataFilter: function(data)
{
var msg;
if (typeof (JSON) !== 'undefined' &&
typeof (JSON.parse) === 'function')
msg = JSON.parse(data);
else
msg = eval('(' + data + ')');
if (msg.hasOwnProperty('d'))
return msg.d;
else
return msg;
},
url: "webservice/ModifierCodesService.asmx/GetModifierList",
success: function(msg)
{
LoadModifiers(msg);
},
failure: function(msg)
{
$("#Result").text("Modifiers did not load");
}
});

这是我的网络服务的一个片段:

...

[WebService(Namespace = "http://mynamespace.com/ModifierCodesService/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[ScriptService]
public class ModifierCodesService : System.Web.Services.WebService
{

/// <summary>
/// Get a list of Modifiers
/// </summary>
/// <returns></returns>
[WebMethod(EnableSession = true)]
public Modifier[] GetModifierList()
{
return GetModifiers();
}
/// <summary>
/// Modifiers list from database
/// </summary>
/// <returns></returns>
private Modifier[] GetModifiers()
{
List<Modifier> modifier = new List<Modifier>();
ModifierCollection matchingModifiers = ModifierList.GetModifierList();
foreach (Modifier ModifierRow in matchingModifiers)
{
modifier.Add(new Modifier(ModifierRow.ModifierCode, ModifierRow.Description));
}
return modifier.ToArray();
}
}

...

目标代码:

 public static class ModifierList
{

/// <summary>
/// Returns the Modifier Collection.
/// </summary>
/// <param name="prefix"></param>
/// <returns></returns>
public static ModifierCollection GetModifierList()
{

关于c# - ASMX 网络服务不返回 JSON,只能使用 application/x-www-form-urlencoded contentType 进行 POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/900231/

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