Likely reason: you are adding authorization header after sending request stream.
var request = WebRequest.Create(url) as HttpWebRequest;
request.ContentType = "application/json";
request.Method = method;
request.ContentLength = data.Length;
// All headers MUST be added before writing to request stream
request.Headers.Add("Authorization", "Basic " + GetEncodedCredentials());
using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
{
writer.Write(data);
}