2016-11-19 10 views
6

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

मेरा वेब एप्लिकेशन फेसबुक एपीआई एपीआई, ट्विटर एपीआई और इंस्टाग्राम एपीआई जैसे विभिन्न एपीआई के साथ संचार कर रहा है।

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

लेकिन अब सवाल के लिए, चलिए ट्विटर एपीआई को एक उदाहरण के रूप में लेते हैं, मेरे वेब एप्लिकेशन का उपयोग करने वाले प्रत्येक उपयोगकर्ता का अपना प्राधिकरण शीर्षलेख (उपयोगकर्ता बाध्य एक्सेस टोकन) होता है। मेरा मानना ​​है कि इसका मतलब है कि मैं HttpClient ऑब्जेक्ट के DefaultRequestHeaders को प्राधिकरण शीर्षलेख सेट नहीं कर सकता।

विभिन्न उपयोगकर्ताओं के लिए HttpClient का पुन: उपयोग करने के लिए सबसे अच्छा अभ्यास क्या है, जिनके पास विभिन्न प्राधिकरण शीर्षलेख हैं?

मैं प्रत्येक अनुरोध के लिए एक HttpRequestMessage वस्तु बना सकते हैं और बजाय डिफ़ॉल्ट एक, httpClient.DefaultRequestHeaders.Authorization करने के लिए इसे स्थापित करने की, httpRequestMessage वस्तु पर प्राधिकरण हैडर सेट सकते हैं?

धन्यवाद।

उत्तर

7

क्योंकि HttpClient (विशेष रूप से सॉकेट की संख्या) बनाने में कुछ लागत शामिल है, HttpClient उदाहरण का पुन: उपयोग करने में कुछ लाभ हैं। यह थ्रेड-सुरक्षित भी है।

आदेश एक ग्राहक उदाहरण कुंजी पैटर्न के साथ कई समवर्ती कॉल के बीच कोई निर्भरता रखने के लिए (बजाय और अधिक सुविधाजनक का उपयोग कर HttpClient.GetAsync, PostAsync, ... का) HttpRequestMessage वर्ग का उपयोग करें और HttpClient.SendAsync विधि को लागू करने की है।

कुछ इस तरह:

var request = new HttpRequestMessage() { 
    RequestUri = new Uri("http://api.twitter.com/someapiendpoint"), 
    Method = HttpMethod.Get 
} 
// set the authorization header values for this call 
request.Headers.Accept.Add(...); 

var response = await client.SendAsync(request); 

अब HttpRequestMessage का अनुरोध हेडर का उपयोग किया जाएगा (और नहीं DefaultRequestHeaders अब और)।

+0

धन्यवाद, यही वही है जो मैं करने की योजना बना रहा था। क्या आपको पता है कि SendAsync समाप्त होने के बाद HttpRequestMessage ऑब्जेक्ट को निपटाने के लिए हानिकारक है या नहीं? – raRaRa

+0

@raRaRa - आपका स्वागत है। HttpRequestMessage IDISposable लागू करता है क्योंकि सामग्री प्रॉपर्टी का HttpContent प्रकार एक IDisposable है। मुझे कोई कारण नहीं दिखता है कि एक निपटान को किसी नुकसान का कारण क्यों होना चाहिए (विशेष रूप से कॉल प्राप्त करने के लिए)। लेकिन मैंने सीधे HttpRequestMessage उदाहरणों का निपटान करने में कोई पहला हाथ अनुभव नहीं किया है। –

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