我在ASP.NET Web表单项目中有一个Web服务,我正在尝试将数据发布到Web服务上的方法,然后返回一个JSON对象而不是默认的XML。
我为此示例简化的Web服务方法如下所示:
[WebMethod(EnableSession = true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public DataControl.JSONMessage NavigationItemsUpdate(string description, int id, string linkText)
{
DataControl.JSONMessage response = new DataControl.JSONMessage();
response.Name = "Item Update";
return response;
}
}
通过AJAX提交以下POST
linkText=Skill+AquisitionAaAa&sequence=5&description=Learn+new+game+skills&uid=7&oper=edit&id=7
使用默认内容类型,但响应是XML格式
Content-Type application/x-www-form-urlencoded; charset=UTF-8
响应:
<?xml version="1.0" encoding="utf-8"?>
<JSONMessage xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/">
<Name>Item Update</Name>
<State>Failed</State>
<Message0>Update</Message0>
</JSONMessage>
我设法获得JSON响应的唯一方法是将我的AJAX调用的内容类型设置为
contentType: "application/json",
哪个从Asp.Net的Web服务获得JSON响应,尽管它在读取POST参数时遇到问题并返回此异常
{"Message":"Invalid JSON primitive: linkText.","StackTrace":" at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()\r\n at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)\r\n at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)\r\n at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.ArgumentException"}
因为它希望POST在JSON中而不是普通的POST
我的问题是如何强制Web服务方法期望POST参数但是以JSON响应?