OK, the problem here is with the migration 302 that occurred after the credential transfer. HttpWebRequest will automatically follow parameter 302.
Ultimately, I ended up doing things differently. First, I subclassed the WebClient class as follows:
public class CookiesAwareWebClient : WebClient { private CookieContainer outboundCookies = new CookieContainer(); private CookieCollection inboundCookies = new CookieCollection(); public CookieContainer OutboundCookies { get { return outboundCookies; } } public CookieCollection InboundCookies { get { return inboundCookies; } } public bool IgnoreRedirects { get; set; } protected override WebRequest GetWebRequest(Uri address) { WebRequest request = base.GetWebRequest(address); if (request is HttpWebRequest) { (request as HttpWebRequest).CookieContainer = outboundCookies; (request as HttpWebRequest).AllowAutoRedirect = !IgnoreRedirects; } return request; } protected override WebResponse GetWebResponse(WebRequest request) { WebResponse response = base.GetWebResponse(request); if (response is HttpWebResponse) { inboundCookies = (response as HttpWebResponse).Cookies ?? inboundCookies; } return response; } }
This allowed me to use the WebClient class, which was known as a cookie, as well as one that I could control forwarding. Then I rewrote my login code as follows:
public NameValueCollection LoginToDatrose() { var loginUriBuilder = new UriBuilder(); loginUriBuilder.Host = DatroseHostName; loginUriBuilder.Path = BuildURIPath(DatroseBasePath, LOGIN_PAGE); loginUriBuilder.Scheme = "https"; var postData = new NameValueCollection(); postData.Add("LoginName", DatroseUserName); postData.Add("Password", DatrosePassword); var responseCookies = new NameValueCollection(); using (var client = new CookiesAwareWebClient()) { client.IgnoreRedirects = true; var clientResponse = client.UploadValues(loginUriBuilder.Uri, "POST", postData); foreach (var nvp in client.InboundCookies.OfType<Cookie>()) { responseCookies.Add(nvp.Name, nvp.Value); } } return responseCookies; }
... and everything worked smoothly.
source share