我试着发布到ADO.NET数据服务,但参数似乎一路上都丢失了。
我有类似的东西:
[WebInvoke(Method="POST")]
public int MyMethod(int foo, string bar) {...}
我使用prototype.js进行ajax调用:
var args = {foo: 4, bar: "'test'"};
new Ajax.Requst(baseurl + 'MyMethod',
method: 'POST',
parameters: args,
onSuccess: jadda,
onFailure: jidda
}
如果我将“method:'POST'”替换为“method:'GET'”和“WebInvoke(Method =”POST“)”with“WebGet”,一切正常但现在(使用post)我得到的是:< / p>
错误请求 - 查询语法错误。
来自该服务。
唯一的解决方法(我不想使用)是即使在我执行帖子时也会在URL中发送所有参数。欢迎任何想法。
答案 0 :(得分:2)
WCF和ASMX Web服务往往对请求正文有点挑剔,当你指定args时,请求通常被编码为表单帖子,即foo = 4&amp; bar = test而不是你需要指定javascript文字: - < / p>
new Ajax.Request(baseurl + 'MyMethod', {
method: 'POST',
postBody: '{"foo":4, "bar":"test"}',
encoding: "UTF-8",
contentType: "application/json;",
onSuccess: function(result) {
alert(result.responseJSON.d);
},
onFailure: function() {
alert("Error");
}
});
答案 1 :(得分:0)
如果要使用POST,则需要在WebInvoke属性中指定要包装在请求中的参数,除非参数包含on object(例如消息协定)。这是有道理的,因为无法在没有json或xml包装的情况下序列化参数。
解包非XML确实是缺少根元素
<foo>1</foo>
<bar>abc</bar>
包装有效的XML
<Request>
<foo>1</foo>
<bar>abc</bar>
</Request>
此示例也适用于JSON
答案 2 :(得分:0)
你是说我应该把你喜欢的参数包装成
var args = {Request: {foo: 3, bar: "'test'"}}
或者我错过了什么?
我试图添加:
ResponseFormat=WebMessageFormat.Json, RequestFormat=WebMessageFormat.Json, BodyStyle=WebMessageBodyStyle.Wrapped
到WebInvoke属性但没有结果。我试图将“Content-Type”(在js POST ajax-call中)设置为“application / x-www-form-urlencoding”和“application / json; charset = utf-8”但没有结果。