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 .....
如题,
当我使用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 .....