我有一些數據「富」,我想從瀏覽器向服務器傳遞和獲取基於包含foo中的信息來預測統計數據。如何將複雜模型從客戶端傳遞到服務器?
$.ajax({
type: 'GET',
url: "/api/predictedStats/",
data: "foo=" + ko.toJSON(foo, fooProperties),
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function(data) {
return _this.viewModel.setPredictedStats(data);
},
error: function(jqXHR, statusText, errorText) {
return _this.viewModel.setErrorValues(jqXHR, errorText);
}
});
我創建了一個預測的統計控制器,並獲取了一個參數爲Foo的方法。
public class PredictedStatsController : ApiController
{
public PredictedStats Get(Foo foo)
{
return statsService.GetPredictedStats(foo);
}
}
堅持Get方法的斷點我看到Foo對象始終爲空。 webapi跟蹤日誌記錄沒有錯誤,只是以下幾行。
WEBAPI: opr[FormatterParameterBinding] opn[ExecuteBindingAsync] msg[Binding parameter 'foo'] status[0]
WEBAPI: opr[JsonMediaTypeFormatter] opn[ReadFromStreamAsync] msg[Type='foo', content-type='application/json; charset=utf-8'] status[0]
WEBAPI: opr[JsonMediaTypeFormatter] opn[ReadFromStreamAsync] msg[Value read='null'] status[0]
我已經沒有任何問題通過POST發送數據到富控制器的服務器上創建Foo對象,所以我可以說沒有什麼錯用JSON創建客戶方。
展望小提琴手所產生的獲取如下所示,其中jsondata是對象foo。
GET /api/predictedStats?foo={jsondata} HTTP/1.1
這是甚至可能或我是否在談論這一切都是錯誤的?
感謝 尼爾
編輯: 我覺得我幾乎得到了這方面的工作有以下
public PredictedStats Get([FromUri]Foo foo)
{
return statsService.GetPredictedStats(foo);
}
的對象foo回來了罰款,但不富的性質正在填充正常。
在我開始藉助與幾乎相同的數據只是刪除了一個POST的平均時間爲「foo =」,這是工作得很好。
我不知道是否有POST或GET應在這種情況下使用,但是這將是有趣的瞭解。
我也發現了這個http://bugs.jquery.com/ticket/8961這似乎表明你不能一個機構重視與jQuery的一個GET請求,以便POST可能是唯一明智的選擇
謝謝,我正在抓我的頭,爲什麼'複雜對象'參數沒有填充,雖然我用'[FromUri]'裝飾了它。我嘗試通過json例如?param = {Name:Foo}哪個不起作用,我不得不將它改成?Name = Foo,就像你說的那樣。請注意,如果您有多個'[FromUri]'複雜的對象參數,則需要確保它們不具有相同名稱的屬性 - 否則最終將爲這兩個實例分配相同的屬性值。 – 2012-09-01 17:53:47
請注意,一個簡單的'公共字符串member1;'不會工作,'member1'仍然是'null'。把它們變成**屬性**,它會正常工作。 – Thomas 2012-10-14 20:47:17
關於他們必須是財產...我爲什麼不讀這4個小時前。談論感覺愚蠢,感謝托馬斯這個簡單而又完美的評論。 – 2013-06-21 15:34:42