2012-07-03 60 views
1

我想將大量變量傳遞給一個Web服務(大約60),我想知道是否有更好的方法來實現這一點。目前,我正在使用一個GET並且能夠通過URI傳遞參數(例如blahblah.com/People/{person_id}),同時這對於傳遞一個ID很有效,它具有很多變量不好,而且很麻煩。我明白,通過執行POST,它可以讓我傳遞許多變量,而無需創建巨大的URL,只需讓WebService處理映射即可。我想這樣做,但只是在我的[WebInvoke(...)]批註中將我的方法值從GET更改爲POST後會出現「不允許」類型的消息。我敢肯定,有一些簡單的我錯過了,並希望得到一些見解。另外,如果我只是將所有變量打包到一個JSON對象中,並將其作爲getJSON的「數據」參數傳遞,它將顯示我所有的變量,但我沒有任何方式從我的服務器端代碼訪問它們。如何通過getJSON將多個變量傳遞給我的WebService?

如果上述情況並未使我的服務器端顯而易見,我在Visual Studio 2008中爲我的RESTful Web服務使用了C#,該服務針對.NET Framework 3.5。我相信這個應用程序是一個「Web服務」,因爲實際的代碼位於一個名爲MyRestService.svc.cs的文件中。

對於我的客戶端,我使用標準的HTML/CSS/JS/jQuery(我沒有在客戶端使用aspx)。從服務器拉,我使用$ .getJSON()函數。

請讓我知道我要離開的信息可以幫助你。

感謝您看,

jnsohnumr

+0

您所能做的就是使用POST。您只需讓服務器接受POST即可使其工作。 – Pointy

+3

爲什麼不簡單地將JSON對象反序列化爲C#.NET對象?使用http://james.newtonking.com/projects/json-net.aspx這種類型的圖書館認爲它沒有那麼困難 – renatoargh

+1

你真的**想要在單個調用中傳遞「約60個」參數嗎? – lurkerbelow

回答

0

對於GET請求,即使您打包數據整齊到客戶端上的JS對象,最終它被髮送爲file.php?var1=1&var2=2

這是很好,除了:

  • 服務器可以用「網址太長」錯誤代碼(我忘記了實際的代碼)
  • 有時響應個
  • 瀏覽器對URL的長度(IE,例如,是,或者至少曾經是,2083個字符)

還有GET的安全影響自己的極限,但如果你正在考慮GET無論如何,我猜你是對的。

POST當然可以避免這樣的問題。最好的做法是讓服務器接受POST,但我不知道這對你有多可行。

回到GET ...我不知道C#,但在PHP中有一個GET超全局,它將接收所有這些傳入變量並將它們打包到關聯數組中。

$_GET; //array of incoming GET vars 

如果沒有在C#中類似的東西,然後你最好的選擇將是反序列化到服務器上其他一些結構。

希望這個漫遊助手的任何部分。

+0

是的,我寧願發佈POST,只是不熟悉ASP WebServices而不是PHP,我同意這會讓它變得很容易。 – jnsohnumr

1

更改[WebInvoke]註釋會使您在服務器端正確設置,但您仍然告訴jQuery從瀏覽器執行GET操作。根據the docs,$。的getJSON是簡寫:

$.ajax({ 
    url: url, 
    dataType: 'json', 
    data: data, 
    success: callback 
}); 

這樣你就可以到$就調用替換您的$ .getJson電話,但有一個額外的參數,使其使用POST:

$.ajax({ 
    url: url, 
    type: 'POST', // Use POST instead of GET 
    dataType: 'json', 
    data: data, // A javascript object with fifty variables on it. 
    success: callback 
}); 

PS--如果您在Web請求中傳遞五十個變量,則表明您可能正在使用請求來處理其他位置(如用戶會話)的某些內容。你可能想重新考慮你的整個方法。

+0

我想跟蹤60個問題調查的答案,每個調查問卷獲得1至5分。我願意接受其他方面的意見。除了將其設置爲POST之外,如何更改WebInvoke以使其工作?我需要對web.config進行任何更改嗎? – jnsohnumr

+0

@jnsohnumr:我認爲你不需要做其他任何事情來完成這項工作。爲什麼,即使在將客戶端代碼更改爲使用AJAX POST後,您是否仍然收到錯誤?關於60個答案,您是否考慮過將問題分解成單獨的頁面,並允許用戶在中途保存答案?沒有什麼比輸入50個答案更煩人,然後發生了一些事情,所以你失去了他們。 – StriplingWarrior

相關問題