मैं एक मौजूदा नेट फिर से लिखें बाकी एपीआई का उपयोग कर (मूल रूप से रूबी के साथ लिखा) करने के लिए हो रहा है। ग्राहक के परिप्रेक्ष्य से, इसे पुराने एपीआई के समान ही काम करना होगा - यानी क्लाइंट कोड को बदलने की आवश्यकता नहीं है। मौजूदा एपीआई को मूल प्रमाणीकरण की आवश्यकता है। तो पुराने एपीआई कॉल करने के लिए, निम्नलिखित पूरी तरह से काम करता है: -ASP.Net वेब एपीआई - प्राधिकरण हैडर खाली
var wc = new System.Net.WebClient();
var myCache = new CredentialCache();
myCache.Add(new Uri(url), "Basic", new NetworkCredential("XXX", "XXX"));
wc.Credentials = myCache;
var returnBytes = wc.DownloadData("http://xxxx");
(मैं वास्तविक URL/उपयोगकर्ता नाम/पासवर्ड सुरक्षा कारणों आदि ommit करना पड़ा है)।
अब मैं MVC4 साथ ASP.Net वेब एपीआई का उपयोग कर नए एपीआई लिख रहा हूँ। मुझे एक अजीब समस्या है और एक ही समस्या के साथ किसी और को नहीं मिल सकता है। आदेश बेसिक प्रमाणीकरण का समर्थन करने के लिए, मैं यहाँ दिशा निर्देशों का पालन किया है:
http://sixgun.wordpress.com/2012/02/29/asp-net-web-api-basic-authentication/
एक बात है, मैं कोड डालने के लिए Application_Start में Global.asax.cs फ़ाइल में "हैंडलर में हुक"() घटना (जिसे समझाया नहीं गया था इसलिए मैंने अनुमान लगाया)।
वैसे भी, अगर मैं उपर्युक्त कोड का उपयोग करके अपना एपीआई (जिसे मैंने आईआईएस में तैनात किया है) कहते हैं, तो प्राधिकरण शीर्षलेख हमेशा शून्य होता है, और उपरोक्त 401 अनधिकृत के साथ विफल रहता है। हालांकि, अगर मैं मैन्युअल रूप से इस कोड का उपयोग करके हेडर सेट करता हूं, तो यह ठीक काम करता है - यानी प्राधिकरण शीर्षलेख अब मौजूद है और मैं उपयोगकर्ता को प्रमाणीकृत करने में सक्षम हूं।
private void SetBasicAuthHeader(WebClient request, String userName, String userPassword)
{
string authInfo = userName + ":" + userPassword;
authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
request.Headers["Authorization"] = "Basic " + authInfo;
}
.......
var wc = new System.Net.WebClient();
SetBasicAuthHeader(request, "XXXX", "XXXX");
var returnBytes = wc.DownloadData("http://xxxx");
हालांकि यह काम करता है, यह मेरे लिए अच्छा नहीं है क्योंकि मौजूदा एपीआई के मौजूदा उपयोगकर्ता मैन्युअल रूप से हेडर सेट नहीं करेंगे।
कैसे मूल प्रमाणीकरण काम करता है पर पढ़ना, प्रारंभिक अनुरोध गुमनाम करने के लिए है, तो ग्राहक 401 लौटा दिया जाता है, तो ग्राहक फिर से कोशिश करने के लिए है। हालांकि अगर मैं अपने कोड में ब्रेक पॉइंट डालता हूं, तो यह एंटनी के उदाहरण में फिर से कोड को हिट नहीं करेगा। मैं अपने ब्रेकपॉइंट को दो बार मारने की उम्मीद कर रहा था।
कोई भी विचार कैसे मैं इस काम करने के लिए मिल सकता है?
बिल्कुल सही - यह काम किया! आपका बहुत बहुत धन्यवाद। – nickthompson