2008-10-22 130 views
2

我試着發佈到ADO.NET數據服務,但參數似乎迷路了。從WCF/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 
} 

如果我取代 「的方法: 'POST'」 用「的方法: 'GET'「和」WebInvoke(Method =「POST」)「與」WebGet「一切正常,但現在(使用後)我得到的是:

錯誤請求 - 查詢語法錯誤。

從服務。

唯一的修復(我不想使用)是發送URL中的所有參數,即使我執行一個帖子。任何想法都歡迎。

回答

2

當你指定參數時,WCF和ASMX web服務往往會對請求主體稍微有所選擇,通常將請求編碼爲表單文章,即foo = 4 & bar = test而不是你需要指定javascript文字: -

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"); 
     } 
    }); 
0

如果您想使用POST,則需要指定要包裝在WebInvoke屬性中的請求中的參數,除非參數包含在對象上(例如消息合約)。這是有道理的,因爲如果沒有包裝在json或xml中,就無法序列化參數。

無包裝這不是XML確實包裝爲缺少根元素

<foo>1</foo> 
<bar>abc</bar> 

,有效的XML

<Request> 
    <foo>1</foo> 
    <bar>abc</bar> 
</Request> 

此示例也適用於JSON

0

你是說我應該換行參數我的javascript像

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」,但沒有結果。

相關問題