2013-05-01 8 views
14

वर्तमान में, मैं एपीआई रैपर पर काम कर रहा हूं। यदि मैं एक खराब Consumer Key भेजता हूं, तो सर्वर Status को 403 Forbidden शीर्षलेख में वापस कर देगा। यह कस्टम हेडर भी पास करेगा। मैं वास्तव में इन कस्टम हेडर को कैसे प्राप्त करूं?HttpClient सभी शीर्षलेखों को पुनर्प्राप्त करें

यह प्रतिक्रिया सर्वर से प्राप्त होती है।

Cache-Control: private 
Date: Wed, 01 May 2013 14:36:17 GMT 
P3P: policyref="/w3c/p3p.xml", CP="ALL CURa ADMa DEVa OUR IND UNI COM NAV INT STA PRE" 
Server: Apache/2.2.23 (Amazon) 
Status: 403 Forbidden 
X-Error: Invalid consumer key. 
X-Error-Code: 152 
X-Powered-By: PHP/5.3.20 
Connection: keep-alive 

मैं X-Error और X-Error-Code पुनः प्राप्त करने की जरूरत है। वर्तमान में, मैं अनुरोध को संसाधित करने के लिए HttpClient कक्षा का उपयोग कर रहा हूं। अगर मैं घड़ी हेडर वी.एस. स्टूडियो 2012 में त्वरित घड़ी लेकर उत्तर, मैं इसे इस

((System.Net.Http.Headers.HttpHeaders)(response.Headers)).headerStore["X-Error-Code"].ParsedValue

की तरह मिल सकता है वहाँ यह करने के लिए किसी भी अन्य रास्ता नहीं है?

संपादित करें: headerStore कोड के माध्यम से पहुंच योग्य नहीं है क्योंकि यह निजी क्षेत्र है। मुझे केवल त्वरित घड़ी विंडो के माध्यम से इसका उपयोग मिलता है। ,

var response = await _httpClient.PostAsync("/v3/oauth/request", content); 

उत्तर

28

खैर, HttpResponseMessage.Headers रिटर्न एक HttpResponseHeaders संदर्भ ताकि आप GetValues()

string error = response.Headers.GetValues("X-Error").FirstOrDefault(); 
string errorCode = response.Headers.GetValues("X-Error-Code").FirstOrDefault(); 
+0

नहीं, मैं नहीं कर सकता है कि के रूप में मैं यह त्रुटि प्राप्त होता 'त्रुटि 3Cannot अनुक्रमण [] के साथ एक अभिव्यक्ति के लिए लागू System.Net.Http.Headers.HttpResponseHeaders 'टाइप करें। मैं स्पष्टता के लिए उपरोक्त अपना कोड अपडेट करूंगा। –

+0

@ शुलीस्पाली: आह - यह नहीं देखा था कि यह 'HttpClient' था। संपादित करेंगे –

+0

यदि आपको अधिक जानकारी की आवश्यकता है, तो आप यहां एक नज़र डाल सकते हैं, https://github.com/shulhi/PocketNet/blob/dev/PocketNet/PocketNet/Authenticator/PocketOauth.cs –

8

बस एक पकड़ लिया है कि मैं जब प्रयास कर पाया उपयोग करने के लिए सक्षम होना चाहिए:

यह अनुरोध के लिए अपने टुकड़ा है एक शीर्षलेख ढूंढने के लिए जो अस्तित्व में नहीं था। आपको GetValues ​​के बजाय TryGetValues ​​का उपयोग करना चाहिए क्योंकि रनटाइम पर हेडर नहीं मिला है तो यह अपवाद फेंक देगा। प्रश्न के शीर्षक के बाद से

IEnumerable<string> cookieHeader; 
response.Headers.TryGetValues("Set-Cookie", out cookieHeader); 
10

है "सभी हेडर प्राप्त करें", मैं उस के संबंध में एक जवाब जोड़ना चाहते थे: आप इस कोड की तरह कुछ का प्रयोग करेंगे।

HttpResponseMessageHttpClient तरीके से वापस आ गया है दो हैडर गुण:

  • HttpResponseMessage.Headers सामान्य प्रतिक्रिया हेडर
  • HttpResponseMessage.Content.Headers के साथ एक HttpResponseHeaders है की तरह Content-Type

दोनों सामग्री विशेष हेडर के साथ एक HttpContentHeaders है ऑब्जेक्ट्स IEnumerable<KeyValuePair<string, IEnumerable<string>> लागू करें, ताकि आप आसानी से सभी को जोड़ सकें कुछ इस तरह के साथ ई हेडर:

var responseMessage = await httpClient.GetAsync(url); 
var headers = responseMessage.Headers.Concat(responseMessage.Content.Headers); 
+0

यह हेडर चर के लिए एक बहुत ही जटिल प्रकार बनाता है।एक स्ट्रिंग या एक साधारण संग्रह में डेटा कैसे प्राप्त करें? –

+0

@JamieMarshall चूंकि यह सबकुछ कुंजी/मूल्य जोड़ों के एक IENumerable में डालता है, इसलिए आप संयुक्त सूची के माध्यम से जाने के लिए फ़ोरैच लूप का उपयोग करने में सक्षम होना चाहिए। प्रत्येक जोड़ी की कुंजी हेडर नाम है, और प्रत्येक जोड़ी का मान हेडर मानों की सूची है। –

+0

यह ध्यान देने योग्य है कि 'कंसट' काम करने के लिए आपको यह सुनिश्चित करने की ज़रूरत है कि आप 'सिस्टम का उपयोग कर रहे हैं। लिंक्स;' –

1

यह मेरे लिए काम करता है:

(String[])response.Headers.GetValues("X-Error"))[0] 
+0

मैं इस निस पर नीचे दिए गए वोट पर कारण के लिए उत्सुक हूं। मैंने इसे यहां एक कंसोल ऐप के रूप में शामिल किया है जिसका उपयोग मैं कर रहा हूं। – nmishr

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