MSDN के अनुसार, जब HttpWebRequest.AllowAutoRedirect
संपत्ति सत्य है, तो रीडायरेक्ट प्रमाणीकरण शीर्षलेख साफ़ कर देंगे।HttpWebRequest.AllowAutoRedirect के साथ प्रमाणीकरण को कैसे संभालें?
प्राधिकरण हैडर ऑटो रीडायरेक्ट पर मंजूरी दे दी और HttpWebRequest अपने आप पुनर्निर्देशित स्थान पर पुन: प्रमाणीकृत करने की कोशिश करता है: वैकल्पिक हल दी IAuthenticationModule प्रमाणीकरण को संभालने के लिए लागू करने के लिए है। प्रैक्टिस में, इसका मतलब यह है कि अगर कोई रीडायरेक्शन का सामना करना संभव हो तो कोई एप्लिकेशन प्राधिकरण शीर्षलेख में कस्टम प्रमाणीकरण जानकारी नहीं डाल सकता है। इसके बजाए, एप्लिकेशन को एक कस्टम प्रमाणीकरण मॉड्यूल को लागू और पंजीकृत करना होगा। System.Net.AuthenticationManager और संबंधित क्लास का उपयोग कस्टम प्रमाणीकरण मॉड्यूल को लागू करने के लिए किया जाता है। प्रमाणीकरण प्रबंधक। पंजीयक विधि एक कस्टम प्रमाणीकरण मॉड्यूल पंजीकृत करता है। जब मैं एक अनुरोध है कि रीडायरेक्ट नहीं करता बनाने
public class Program { static void Main(string[] args) { // replaces the existing handler for Basic authentication AuthenticationManager.Register(new CustomBasic()); // make a request that requires authentication HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@"https://www.SomeUrlThatRequiresAuthentication.com"); request.Method = "GET"; request.KeepAlive = false; request.ContentType = "text/plain"; request.AllowAutoRedirect = true; request.Credentials = new NetworkCredential("userName", "password"); HttpWebResponse result = (HttpWebResponse)request.GetResponse(); } }
: कार्यक्षमता व्यायाम करने के लिए
public class CustomBasic : IAuthenticationModule { public CustomBasic() { } public string AuthenticationType { get { return "Basic"; } } public bool CanPreAuthenticate { get { return true; } } private bool checkChallenge(string challenge, string domain) { if (challenge.IndexOf("Basic", StringComparison.InvariantCultureIgnoreCase) == -1) { return false; } if (!string.IsNullOrEmpty(domain) && challenge.IndexOf(domain, StringComparison.InvariantCultureIgnoreCase) == -1) { return false; } return true; } public Authorization PreAuthenticate(WebRequest request, ICredentials credentials) { return authenticate(request, credentials); } public Authorization Authenticate(String challenge, WebRequest request, ICredentials credentials) { if (!checkChallenge(challenge, string.Empty)) { return null; } return this.authenticate(request, credentials); } private Authorization authenticate(WebRequest webRequest, ICredentials credentials) { NetworkCredential requestCredentials = credentials.GetCredential(webRequest.RequestUri, this.AuthenticationType); return (new Authorization(string.Format("{0} {1}", this.AuthenticationType, Convert.ToBase64String(Encoding.ASCII.GetBytes(string.Format("{0}:{1}", requestCredentials.UserName, requestCredentials.Password)))))); } }
और एक साधारण ड्राइवर:
मैं इस इंटरफेस की एक बुनियादी कार्यान्वयन बनाया मेरी कक्षा पर Authenticate
विधि कहा जाता है, और प्रमाणीकरण सफल होता है। जब मैं एक अनुरोध करता हूं जो 307 (अस्थायी रीडायरेक्ट) प्रतिक्रिया को दोहराता है, तो मेरी कक्षा के किसी भी तरीके को नहीं कहा जाता है, और प्रमाणीकरण विफल रहता है। यहाँ क्या चल रहा है?
मैं ऑटो रीडायरेक्ट को अक्षम नहीं करता और 3xx प्रतिक्रियाओं को संभालने के लिए कस्टम तर्क लिखना नहीं चाहता हूं। ऑटो रीडायरेक्ट के साथ काम करने के लिए मैं अपना प्रमाणीकरण तर्क कैसे प्राप्त कर सकता हूं?
आप इस कोशिश कर सकते हैं जब आप के बजाय सही गलत पर KeepAlive सेट:
निम्न संसाधन इस बात की पुष्टि करने (.NET प्रलेखन संदर्भ ओपी में उल्लेख किया है की तुलना में) लग रहा था? या अनुरोध लाइन में रीडायरेक्ट यूआरएल रखें? इस बारे में ज्यादा पता नहीं है, लेकिन शायद यह –
FWIW में मदद करता है, मैं वास्तव में एक ही समस्या हो रहा है और एक समाधान की तलाश में। – tomo