2013-09-04 8 views
9
public static class HttpRequestHelper 
{ 
    public static string RequestBody() 
    { 
     var bodyStream = new StreamReader(HttpContext.Current.Request.InputStream); 
     bodyStream.BaseStream.Seek(0, SeekOrigin.Begin); 
     var bodyText = bodyStream.ReadToEnd(); 
     return bodyText; 
    } 
} 

मैं इनकमिंग अनुरोधों को लॉग इन करने के लिए इसे एक्शनफ़िल्टर से कॉल करने की योजना बना रहा हूं। बेशक कई एक साथ अनुरोध हो सकते हैं।क्या यह एक सुरक्षित तरीका है HttpContext अनुरोध

क्या यह दृष्टिकोण ठीक है?

उत्तर

5

सामान्य रूप में संगामिति या ASP.NET वेब एपीआई के नजरिए से आपका प्रश्न है? प्रत्येक अनुरोध का अपना संदर्भ होता है और आप समानांतर में कई अनुरोधों के साथ ठीक हैं। लेकिन यहां देखने के लिए यहां दो चीजें हैं।

(1) चूंकि आप HttpContext का उपयोग कर रहे हैं, तो आप स्वयं को वेब होस्टिंग (आईआईएस) पर लॉक कर रहे हैं, जो कई मामलों में ठीक होना चाहिए। लेकिन मैं चाहता हूं कि आप इससे अवगत रहें।

(2) आपका कोड HttpRequestHelper.RequestBody() आपके द्वारा उल्लिखित कार्रवाई फ़िल्टर से कॉल किए जाने पर काम करेगा। हालांकि, अगर आप इसे अन्य स्थानों से कॉल करने का प्रयास करते हैं, तो एक संदेश हैंडलर कहें, यह काम नहीं करेगा। जब मैं कहता हूं कि यह काम नहीं करेगा, पैरामीटर बाध्यकारी जो अनुरोध शरीर को क्रिया विधि पैरामीटर से बांधता है, काम नहीं करेगा। एक बार पूरा होने के बाद आपको शुरुआत की तलाश करनी होगी। एक्शन फ़िल्टर से यह काम करने का कारण यह है कि बाध्यकारी पहले से ही पाइपलाइन में एक्शन फ़िल्टर चलाता है। यह एक और चीज है जिसके बारे में आपको अवगत होना चाहिए।

+0

पुन। (2) क्या मुझे bodyStream.BaseStream.Seek (0, SeekOrigin.Begin) जोड़ना चाहिए; var bodyText = bodyStream.ReadToEnd() के बाद; ? – tom

+0

पुन: (1) इसे इंगित करने के लिए धन्यवाद; मैं निकट भविष्य के लिए आईआईएस पर होस्टिंग करूँगा। – tom

+0

हां, आप सुरक्षित पक्ष में शुरुआत की तलाश कर सकते हैं। – Badri

0

मुझे एचटीपी अनुरोध के इनपुटस्ट्रीम का उपयोग करने की आवश्यकता है। मेरे पास एक वेब ऐप और आईओएस ऐप है जो एएसपीएक्स पेज पर नेविगेट करता है, अगर यूआरएल अनुरोध में कुछ पैरामीटर हैं जो मैं डेटाबेस में जानकारी पढ़ता हूं और यदि मुझे यूआरएल अनुरोध में कोई पैरामीटर नहीं मिलता है तो मैं अनुरोध निकाय पढ़ता हूं और मैं ठीक काम करता हूं!

 protected void Page_Load(object sender, EventArgs e) 
     { 
      try 
      { 
       if (string.IsNullOrEmpty(Request.QueryString["AdHoc"]) == false) 
       { 



         string v_AdHocParam = Request.QueryString["AdHoc"]; 
         string [] v_ListParam = v_AdHocParam.Split(new char[] {','}); 

         if (v_ListParam.Length < 2) 
     { 


        DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(WS_DemandeIntervention)); 
        WS_DemandeIntervention response = (WS_DemandeIntervention)jsonSerializer.ReadObject(Request.InputStream); 
.... 
} 


    if (string.IsNullOrEmpty(Request.QueryString["IdBonDeCommande"])==false) 

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