使用Web服务的asp.net表单不会接受POST参数

时间:2013-09-12 07:40:45

标签: c# asp.net ajax json web-services

我在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响应?

0 个答案:

没有答案