2015-08-20 8 views
7

मैं एक वेब एपीआई एकीकरण परीक्षण कर रहा हूं।डिफ़ॉल्ट अनुरोध हैडर किसी भी मान को हमेशा स्वीकार नहीं करता है

मैं एक HTTP अनुरोध के शीर्षक के लिए अपने वाहक टोकन पास करना चाहते हैं:

httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "eJ43k5l435j34l5j43l5j34l5jl35j34l5j344l.4534535.534534sample..."); 

जब कोड की इस पंक्ति से किया जाता है मैं httpClient.DefaultRequestHeaders.Authorization संपत्ति की जांच करेंगे और यह NULL है?

यह क्यों?

अद्यतन

यह मेरा एकीकरण परीक्षण वर्ग के आधार वर्ग से है:

protected HttpClient Client { get { return server.HttpClient; } } 

जब मैं मैन्युअल रूप से ऊपर नए परीक्षण कक्षा में एक http ग्राहक:

var client = new HttpClient(); 
client.DefaultRequestHeaders.Add("key","value"); 

यह काम करता है लेकिन मेरे ग्राहक के साथ नहीं!

अद्यतन 2

ठीक मैं इस पता चला:

var c = Client; 
c.DefaultRequestHeaders.Add("bla", "bla"); 

आईटी काम करता है, लेकिन क्यों मैं एक नया चर में मेरे मुवक्किल को पढ़ने के लिए है?

+0

मुझे लगता है कि मुझे इसे हल करने के लिए थोड़ा और कोड चाहिए .. आपकी पहली पंक्ति में 'httpClient' कहां से आ रहा है? जैसा कि मैंने इसे देखा है, यह एक HttpClient ऑब्जेक्ट है, यह है कि 'संरक्षित HttpClient क्लाइंट {से एक नया ऑब्जेक्ट {get server.HttpClient; }} '?? यदि, 'सर्वर' के साथ क्या किया जाता है। और क्या आप एपीआई पर इस कोड का उपयोग कर रहे हैं, या एक एपीआई का उपयोग कर एक आवेदन? – CularBytes

+0

क्या आप अपने सर्वर चर के प्रकार के बारे में कुछ जानकारी जोड़ सकते हैं? यदि यह एक वर्ग है जिसे आपने बनाया है या ढांचा प्रकार है। यदि यह आपकी खुद की एक श्रेणी है, तो क्या आप एचटीपी क्लाइंट को तत्काल कैसे शुरू किया जा रहा है, इस बारे में अधिक जानकारी दे सकते हैं? –

+0

क्या आपको कभी इसका समाधान मिला? मेरे पास एक ही समस्या है, एक वेबएपीआई 2 कोडबेस पर एकीकरण परीक्षण चलाने की कोशिश कर रहा है, और मैं हेडर असाइन करता हूं (जैसा कि आप करते हैं) और तुरंत अगली पंक्ति पर यह हमेशा शून्य है ... यह मुझे पागल कर रहा है।HttpClient पर हेडर सेट करने के बजाय, मुझे एक (एकल) उदाहरण मिला जहां प्रोग्रामर ने इसके बजाय HttpMessageRequest पर शीर्षलेख सेट किया, और उदाहरण के लिए HttpClient.PostAsJson की बजाय HttpClient.SendAsync का उपयोग करके भेजा ... यह मुझे बहुत खर्च करता है समय और मुझे अभी भी पता नहीं है कि हेडर क्लाइंट पर हेडर क्यों सेट नहीं किया जा सकता है ?? –

उत्तर

0

मैंने पढ़ा है (एक लेख में जो मुझे नहीं मिल रहा है, माफ करना) कि एथ हेडप क्लाइंट पर हैडर (विशेष रूप से इनमेमरी टेस्टसेवर होस्ट में, जो स्पष्ट रूप से प्रमाणीकृत सेवाओं को संभाल नहीं सकता है और ऐसा लगता है कि मेरे लिए बेकार है ? https://blog.kloud.com.au/2014/10/26/asp-net-web-api-integration-testing-with-one-line-of-code/ देखें "दुर्भाग्यवश, इन-मेमोरी समाधान बॉक्स के बाहर मेरे लिए काम नहीं करता है। ऐसा लगता है कि यह प्रमाणीकरण को संभाल नहीं सकता है। मैं WebJi में UseJwtBearerAuthentication (JWT Bearer टोकन मिडलवेयर) और मेरे एपीआई कॉल का परिणाम 401") का उपयोग करता हूं केवल प्राप्त कर रहे हैं - मुझे एक ही समस्या थी, प्रमाणीकृत अंतराल के खिलाफ एकीकरण परीक्षण करने की कोशिश कर रहा था - मुझे अपना भालू टोकन मिला, इसे हेडर में जोड़ा गया, लेकिन कोड की अगली पंक्ति में, यह शून्य था।

मुझे मिली सलाह (और जिस समाधान में मैं काम कर रहा हूं) को बेयरर हेडर को HttpRequestMessage हेडर में जोड़ना था, न कि HttpClient शीर्षलेख, और फिर HttpClient.PostAsync (जो स्पष्ट रूप से, किसी भी कारण से) के बजाय HttpClient.SendAsync का उपयोग करना था , शरीर की सामग्री पोस्ट करता है लेकिन हेडर नहीं)।

मैं इसे पहले से ही समझने की कोशिश कर रहा हूं, और आपके द्वारा प्राप्त अधिकांश ट्यूटोरियल लेखकों के साथ सौदा नहीं करते हैं, इसलिए मुझे आश्चर्य है कि अधिक लोग इस समस्या पर चर्चा नहीं करते हैं (निश्चित रूप से, मैं ' मैं सिर्फ एक मपेट नहीं)। लेकिन हाँ, अपने ऑथ हेडर को अनुरोध संदेश में जोड़ने का प्रयास करें, न कि http क्लाइंट।

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