मेरे पास कुछ डेटा "फू" है जो मैं ब्राउज़र से सर्वर पर पास करना चाहता हूं और 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);
}
}
प्राप्त विधि पर एक ब्रेकपाइंट चिपका मैं देख रहा हूँ फू वस्तु हमेशा रिक्त है। वेबपी ट्रेस लॉगिंग से केवल निम्नलिखित पंक्तियों में फेंकने वाली कोई त्रुटि नहीं है।
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]
मैं सर्वर पर फू वस्तु बनाने के लिए तो मैं json बनाया clientside साथ कुछ भी गलत नहीं है कह सकते हैं फू नियंत्रक के लिए एक पोस्ट के माध्यम से डेटा भेजने में कोई समस्या नहीं है।
परिणामस्वरूप फिडलर में देख रहे हैं परिणाम प्राप्त करें जैसे jsondata ऑब्जेक्ट foo है।
GET /api/predictedStats?foo={jsondata} HTTP/1.1
क्या यह भी संभव है या मैं इस सब गलत के बारे में जा रहा हूं?
धन्यवाद नील
संपादित करें: मुझे लगता है कि मैं लगभग इस निम्नलिखित
public PredictedStats Get([FromUri]Foo foo)
{
return statsService.GetPredictedStats(foo);
}
वस्तु foo वापस ठीक आ रहा था के साथ काम कर लेकिन फू का कोई गुण आबादी वाले जा रहे थे मिल गया अच्छी तरह।
मतलब समय मैं पास समान डेटा बस छोड़ने के साथ एक पोस्ट का उपयोग कर का सहारा लिया गया है में "foo =" और यह सिर्फ ठीक काम कर रहा है।
मुझे यकीन नहीं है कि इस मामले में POST या GET का उपयोग किया जाना चाहिए, लेकिन यह जानना दिलचस्प होगा।
मैं भी इस http://bugs.jquery.com/ticket/8961 जो सुझाव देने के लिए आप jQuery के साथ एक GET अनुरोध में एक शरीर अनुलग्न नहीं कर सकते तो पोस्ट शायद ही समझदार विकल्प
धन्यवाद, मैं अपने सिर को खरोंच कर रहा था क्यों एक 'जटिल वस्तु' पैरामीटर पॉप्युलेट नहीं किया गया था, हालांकि मैंने इसे '[FromUri]' से सजाया था। मैंने जेसन में पास करने की कोशिश की ? param = {नाम: Foo} जो काम नहीं करता था, मुझे इसे बदलना पड़ा था? नाम = फू जैसा आपने कहा था। ध्यान दें कि यदि आपके पास एकाधिक '[FromUri]' जटिल ऑब्जेक्ट पैरामीटर हैं, तो आपको यह सुनिश्चित करना होगा कि उनके पास समान नाम वाले गुण न हों - या आप दोनों उदाहरणों को आवंटित वही संपत्ति मान के साथ समाप्त हो जाएंगे। –
कृपया ध्यान दें कि एक साधारण 'सार्वजनिक स्ट्रिंग सदस्य 1;' काम नहीं करेगा और 'सदस्य 1' अभी भी' शून्य 'होगा। उन्हें ** गुण ** में बदलें और यह ठीक काम करेगा। – Thomas
उनके बारे में संपत्ति होने के बारे में ... मैंने 4 घंटे पहले यह क्यों नहीं पढ़ा। बेवकूफ महसूस करने के बारे में बात करें, धन्यवाद थॉमस इस सरल के लिए अभी तक ओह बहुत सही टिप्पणी। –