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

No parameterless constructor defined when POST request in JSON Content Type with ASMX Web Service

如题,

当我使用fiddler测试页面时 -

http://localhost:59583/JSONtest.asmx/Test 内容类型: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;
    }

那是因为您的第一个代码段中的 "header" 是具有属性的 class,而不是代码中的单个 string。在我看来,错误消息只是令人困惑。

第二个代码段确实只有一个 string 作为 "header" 的值,这样就可以了。如果你真的想让 "header" 成为一个对象,你必须为它创建一个单独的 class 才能正确序列化它。

在发送 Ajax post 请求之前您可以将 header object 和它的值放在 JSON.stringify()

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

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

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