Я думаю, это происходит потому, что вы не указываете длину контента.Также может быть (но маловероятно) отсутствие заголовка Accept.Вот фрагмент из моего кода для любого клиента REST:
Подготовить запрос (тело является строковой переменной с сериализованным содержимым):
HttpWebRequest Request = WebRequest.CreateHttp(BaseAddress.Uri);
if (!string.IsNullOrWhiteSpace(method))
Request.Method = method;
else
Request.Method = "GET";
Request.Headers.Add("Authorization", BasicAuthInfo);
Request.Accept = "application/json";
if (!string.IsNullOrWhiteSpace(body))
{
UTF8Encoding encoding = new UTF8Encoding();
byte[] byteBody = encoding.GetBytes(body);
Request.ContentLength = byteBody.Length;
using (Stream dataStream = Request.GetRequestStream())
dataStream.Write(byteBody, 0, byteBody.Length);
if (string.IsNullOrEmpty(Request.ContentType))
Request.ContentType = "application/json";
}
Сделать запрос (где PrepareHttpWebRequest - это вызов предыдущегофрагмент):
protected string JSONQuery(string subPath, string query = null, string method = null, NameValueCollection extraHeaders = null, string body = null)
{
HttpWebRequest Request = PrepareHttpWebRequest(AuthenticationMethod.Basic, subPath, query, method, extraHeaders, body);
using (WebResponse Response = Request.GetResponse())
{
using (Stream ResponseStream = Response.GetResponseStream())
{
using (StreamReader Reader = new StreamReader(ResponseStream, Encoding.UTF8))
{
string result = Reader.ReadToEnd();
return result;
}
}
}
}