2013-07-23 11 views
26

यह मुझे पागल कर रहा है। मैं एएसपी.नेट एमवीसी का उपयोग कर रहा हूँ। मेरे पास एक HttpPost एक्शन वाला नियंत्रक है जो कॉलबैक यूआरएल के रूप में कार्य करता है जिसे किसी अन्य सर्वर द्वारा बुलाया जाता है (मेरे नियंत्रण में नहीं)। मैं WebAPI या मॉडल बाइंडिंग का उपयोग किए बिना जेएसओएन को गतिशील रूप से पढ़ना चाहता हूं। यूआरएल में एक क्वेरी स्ट्रिंग पैरामीटर भी पास हो गया है।एएसपी.नेट एमवीसी रॉ जेएसओएन पोस्ट डेटा पढ़ें

http://domain.com/callback?secret=1234

मैं का उपयोग कर तैनात इनपुट पढ़ने की कोशिश की है:

[HttpPost] 
public ActionResult Callback(String secret) 
{ 
    String jsonData = new StreamReader(this.Request.InputStream).ReadToEnd(); 

    // ... 
} 

हालांकि "jsonData" हमेशा शून्य या खाली है

कॉलबैक URL कुछ इस तरह लग रहा है।

मैं सिर्फ पोस्ट इनपुट प्राप्त करना चाहता हूं और इसे जेसनएफएक्स में चिपकाना चाहता हूं ताकि मैं गतिशील रूप से सामग्री तक पहुंच सकूं। यह सबसे आसान तरीका कैसे करना है इस पर कोई विचार?

अद्यतन

मैं निम्नलिखित खोज लिए हैं ...

जबकि से काम नहीं होता (jsonData शून्य या खाली हो जाएगा), यदि निम्न मैं कॉन्फ़िगर करता है क्या थोड़ा विकल्प मेरे पास कॉलिंग सर्वर पर ताकि "गुप्त" क्वेरी स्ट्रिंग पैरामीटर को छोड़ दिया जा सके, जो कि मैं उस अंत में कर सकता हूं क्योंकि यह मेरा सर्वर नहीं है। इस मामले में, jsonData सही JSON स्ट्रिंग तैनात होंगे:

[HttpPost] 
public ActionResult Callback(/* String secret */) 
{ 
    String jsonData = new StreamReader(this.Request.InputStream).ReadToEnd(); 

    // ... 
} 

यह बहुत आस-पास काम करने के लिए निराशा होती है और मैं दोनों एक क्वेरी स्ट्रिंग को स्वीकार करने के लिए एक आसान तरीका जानते हैं और एक मानक MVC पर JSON डेटा तैनात नहीं है नियंत्रक।

मेरे पास एक्शन विधियों के साथ "कॉलबैक नियंत्रक" है जो अलग-अलग तृतीय-पक्ष सर्वरों से विभिन्न डेटा (जीईटी के माध्यम से, जेएसओएन पोस्ट के माध्यम से, JSON POST के माध्यम से, JSON POST w/a क्वेरी स्ट्रिंग इत्यादि के माध्यम से) स्वीकार करता है। ये मर्चेंट-टाइप कॉलबैक हैं जहां सूचनाओं को व्यक्त करने के लिए प्रयुक्त प्रारूपों या विधियों पर मेरा कोई नियंत्रण नहीं है। मुझे केवल कॉलबैक स्वीकार करने और उस जानकारी को संसाधित करने की आवश्यकता है जो वहां होना चाहिए।

"JSON POST w/a Query String" के मामले को छोड़कर यह सब मेरे नियंत्रक में ठीक काम करता है।

यह मानक एएसपी.नेट एमवीसी नियंत्रकों में कमी होने के लिए (कम से कम मेरे लिए) दिखाई देता है। ???

क्या कोई इस समाधान का सुझाव दे सकता है जिसका उपयोग मानक एएसपी.नेट एमवीसी नियंत्रक में किया जा सकता है?

+0

जब आप इसे पोस्ट करते हैं, तो सभी जेसन बराबर 'jsonData' रखें। जैसे '[{jsonData: [{... सभी जेसन सामान ...}]}]; 'मैंने इसका परीक्षण नहीं किया है, लेकिन यह – jzm

+0

काम कर सकता है मेरे पास सर्वर पर कोई नियंत्रण नहीं है जो जानकारी पोस्ट करता है। मैंने ऊपर एक अद्यतन जोड़ा। – lantram

+0

आप 'jsonData' नाम का चयन क्यों करते हैं ?, जेसन डेटा एक अलग नाम पर आ सकता है, नाम के लिए फॉर्मकोलेक्शन का निरीक्षण करने का प्रयास करें। – tkt986

उत्तर

50

ताकि आप इसे रिवाइंड करना चाहिए आपका प्रारंभिक दृष्टिकोण, अगर आप इस तथ्य को ध्यान में रखना है कि बाध्यकारी ASP.NET MVC मॉडल पहले से ही है स्ट्रीम पढ़ें काम करना चाहिए:

[HttpPost] 
public ActionResult Callback(string secret) 
{ 
    Request.InputStream.Seek(0, SeekOrigin.Begin); 
    string jsonData = new StreamReader(Request.InputStream).ReadToEnd(); 

    // ... 
} 
+0

बहुत बढ़िया! आपका बहुत बहुत धन्यवाद। मुझे पता था कि एक साधारण समाधान होना था। – lantram

+0

यह काम करता है लेकिन इस http://stackoverflow.com/questions/21441571/get-post-request-parameters-in-custom-authorizeattribute के बारे में कोई भी विचार – PUG

0

पढ़ने से पहले Zero करने के लिए position रीसेट धारा। Request.InputStream.Position = 0

संबंधित मुद्दे