Making a GET request using Basic Authentication is pretty easy using the BCL:
var webRequest = WebRequest.Create(uri);
webRequest.Credentials = new NetworkCredential("userName", "password");
using (var webResponse = webRequest.GetResponse())
{
using (var responseStream = webResponse.GetResponseStream())
{
return new StreamReader(responseStream).ReadToEnd();
}
}
As is making an unauthenticated POST request:
var webRequest = WebRequest.Create(uri);
webRequest.Method = "POST";
var bytes = Encoding.UTF8.GetBytes(data);
webRequest.ContentLength = bytes.Length;
webRequest.ContentType = "application/x-www-form-urlencoded";
using (var requestStream = webRequest.GetRequestStream())
{
requestStream.Write(bytes, 0, bytes.Length);
}
...
But, for some reason, combining the two resulted in me being redirected to the login page. I thought it might need to be done in a specific order (like setting the content length before the type), but nothing I tried made any difference.
Luckily a StackOverflow post suggested an alternative, explicitly setting the Authorization header:
var webRequest = WebRequest.Create(uri); webRequest.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes(username + ":" + password)); webRequest.Method = "POST"; ...
Which works as expected.