使用ASMX Web服务{J}内容类型中的POST请求时未定义无参数构造函数

时间:2016-03-29 13:30:34

标签: c# json web-services asmx

作为标题,

当我使用fiddler测试页面时 -

http://localhost:59583/JSONtest.asmx/Test Content-Type:application / json;字符集= UTF-8

我的请求正文是

{"header":{"sig":"abcdefg","timestamp":"2016-03-25T04:25:09.8395853Z"}}

它将回复此错误消息: 没有为\ u0027System的类型定义无参数构造函数.String \ u0027

但是如果我把JSON格式用反斜杠:

{"header":"{\"sig\":\"abcdefg\",\"timestamp\":\"2016-03-25T04:25:09.8395853Z\"}"}

响应将显示我想要的结果是正确的。

如何在不使用反斜杠JSON格式的情况下插入?

这是我的asmx代码。

    [WebMethod]
    [ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
    public string Test(string header)
    {
        return header;
    }

2 个答案:

答案 0 :(得分:0)

这是因为您的第一个代码段中的"header"是一个包含属性的类,而不是代码中的string。在我看来,错误信息令人困惑。

第二个代码段只有一个string作为"header"的值,所以没关系。如果你真的希望"header"成为一个对象,你必须为它创建一个单独的类才能使它正确序列化。

答案 1 :(得分:0)

在发送Ajax发布请求之前

您可以将头对象及其值包装在JSON.stringify()

var myHeader = {"header":JSON.stringify(headerValue)};
var myParams = JSON.stringify(myHeader);

然后你可以将 myParams 变量作为数据参数发送到ajax请求中

$.ajax('url',data:myParams  .....