2014-05-07 14 views
20

मैं वर्तमान में क्रॉस प्लेटफ़ॉर्म समर्थन के लिए System.Net.Http.HttpClient का उपयोग कर रहा हूं।प्रति अनुरोध अनुरोध हेडर संशोधित करें C# HttpClient पीसीएल

मैंने पढ़ा है कि प्रत्येक अनुरोध के लिए एक HttpClient ऑब्जेक्ट को चालू करने के लिए यह एक अच्छा अभ्यास नहीं है और जब भी संभव हो, आपको इसका पुन: उपयोग करना चाहिए।

अब सेवा के लिए क्लाइंट लाइब्रेरी लिखते समय मुझे कोई समस्या है। कुछ एपीआई कॉलों को एक विशिष्ट शीर्षलेख होना चाहिए, कुछ में इस विशिष्ट शीर्षलेख को शामिल नहीं करना चाहिए।

ऐसा लगता है कि मैं केवल "DefaultRequestHeaders" में हेरफेर कर सकता हूं जो प्रत्येक अनुरोध के साथ भेजा जाएगा।

क्या वास्तव में अनुरोध के साथ अनुरोध करते समय कोई विकल्प है "क्लाइंट.पोस्टएसिंक()" केवल विशिष्ट अनुरोध के लिए हेडर को संशोधित करने के लिए?

(जानकारी: अनुरोध बहु थ्रेड किए जा सकते हैं)।

अग्रिम धन्यवाद!

उत्तर

39

हां, आप एक नया HttpRequestMessage बना सकते हैं, आपको आवश्यक सभी गुण सेट कर सकते हैं, और फिर इसे SendAsync पर भेज सकते हैं।

var request = new HttpRequestMessage() { 
    RequestUri = new Uri("http://example.org"), 
    Method = HttpMethod.Post, 
    Content = new StringContent("Here is my content") 
} 
request.Headers.Accept.Add(...); // Set whatever headers you need to 

var response = await client.SendAsync(request); 
+0

@ user2864740 यह अजीब बात है। यह .NET 4.5.1 और पीसीएल संस्करणों दोनों में होना चाहिए https://msdn.microsoft.com/en-us/library/system.net.http.httpclient.sendasync(v=vs.118).aspx –

+1

ओह, मेरी गलती .. मैं 'Get..':} – user2864740

+1

@DarrelMiller पर देख रहा था जब ग्राहक एकाधिक HttpRequestMessages जारी करता है तो क्या होता है? उदाहरण के लिए, एपीआई हिट करने के लिए हेडर में एक्सेस टोकन को पास करने की आवश्यकता है, मैं एक अनुरोध करता हूं और फिर आप एक अनुरोध करते हैं (हम ग्राहक साइट के दोनों उपयोगकर्ता हैं) - HttpClient इंस्टेंस को इसके स्थिर होने के बाद अनुरोधों के बीच साझा किया जाता है । आइए कहें कि मेरा अनुरोध आपके से अधिक समय लेता है, क्या इससे समस्याएं पैदा होती हैं? – crizzwald

1

HttpContent.Headers का उपयोग करें। बस आवश्यक हेडर के साथ HttpContent उदाहरण बनाएं और इसे PostAsync विधि पर पास करें।

+1

यह काम नहीं करेगा क्योंकि शीर्षलेख * अनुरोध * शीर्षलेख हैं, सामग्री शीर्षलेख नहीं। – easuter

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