8

में जेएसओएन पोस्ट डेटा पढ़ें मैंने इसके लिए एक समाधान खोजने की कोशिश की है, लेकिन आने वाले सभी एएसपी.Net के पिछले संस्करणों के लिए हैं।एएसपी.Net कोर एमवीसी

मैं जेडब्ल्यूटी प्रमाणीकरण मिडलवेयर के साथ काम कर रहा हूँ और निम्न विधि है:

private async Task GenerateToken(HttpContext context) 
{ 
    var username = context.Request.Form["username"]; 
    var password = context.Request.Form["password"]; 
    //Remainder of login code 
} 

इस भेजे गए डेटा के रूप में अगर यह प्रपत्र डेटा था, लेकिन हो जाता है मेरी कोणीय 2 सामने के छोर JSON के रूप में डेटा भेज रहा है ।

login(username: string, password: string): Observable<boolean> { 
    let headers = new Headers({ 'Content-Type': 'application/json' }); 
    let options = new RequestOptions({ headers: headers }); 
    let body = JSON.stringify({ username: username, password: password }); 
        return this.http.post(this._api.apiUrl + 'token', body, options) 
            .map((response: Response) => { 
                 
            }); 
    } 

मेरा पसंदीदा समाधान इसे JSON के रूप में भेजना है, लेकिन मैं डेटा पुनर्प्राप्त करने में असफल रहा हूं। मुझे पता है कि यह भेज रहा है, क्योंकि मैं इसे फिडलर में देख सकता हूं, और अगर मैं पोस्टमैन का उपयोग करता हूं और फॉर्म डेटा भेजता हूं तो यह ठीक काम करता है।

असल में मैं सिर्फ यह पता लगाने की json डेटा

var username = context.Request.Form["username"]; 
+0

कारण है कि आप केवल आपके समारोह के लिए लॉग इन सामग्री प्रकार 'आवेदन/x-www फार्म-urlencoded' और बस यूआरएल एनकोड json –

+0

उपयोग करने के लिए मैं पूरी चाहते हैं स्विच नहीं करते फ्रंट एंड जेसन और कुछ उपयोग फॉर्म डेटा के बजाय जेसन भेजने में सक्षम होने के लिए। मैंने वास्तव में इस मार्ग को आजमाया था और डेटा डेटा के रूप में सही ढंग से भेजने के लिए डेटा प्राप्त करने में कठिनाई हो रही थी। यहां तक ​​कि उदाहरणों के साथ मैं दोनों को एक दूसरे से सही ढंग से बात करने के लिए नहीं मिला। – Jhorra

+0

क्या आप इसे करने में सक्षम नहीं होना चाहिए? 'encodeURIComponent (JSON.stringify ({उपयोगकर्ता नाम: उपयोगकर्ता नाम, पासवर्ड: पासवर्ड}));' –

उत्तर

7

पढ़ने के लिए समय यह अपने मिडलवेयर जाता अनुरोध धारा पहले से ही पढ़ा जा चुका है तक इस लाइन को बदलने के तरीके की जरूरत है, तो तुम यहाँ क्या कर सकते हैं Microsoft.AspNetCore.Http.Internal.EnableRewindअनुरोध पर है और यह अपने आप

साइट विस्तृत पढ़ें:

Startup.cs 
using Microsoft.AspNetCore.Http.Internal; 

Startup.Configure(...){ 
... 
//Its important the rewind us added before UseMvc 
app.Use(next => context => { context.Request.EnableRewind(); return next(context); }); 
app.UseMvc() 
... 
} 

या चुनिंदा:

private async Task GenerateToken(HttpContext context) 
    { 
    context.Request.EnableRewind(); 
    string jsonData = new StreamReader(context.Request.Body).ReadToEnd(); 
    ... 
    } 
+0

बता दूंगा कि आप अपने मिडलवेयर और अपनी 'जेनरेट टोकन' विधि में 'EnableRewind' क्यों कॉल कर रहे हैं? –

+0

अच्छा बिंदु @JimAho - संपादित। –

+1

दूसरे विकल्प के साथ आपको उन दो पंक्तियों के बीच 'context.Request.Body.Position = 0;' जोड़ना होगा। अन्यथा पाठक एक खाली स्ट्रिंग देता है क्योंकि सर्वर पहले ही शरीर के अंत तक पहुंच चुका था। –