Я новичок в JSON и C# и пытаюсь написать код, который будет выполнять POST-запрос HTTP для получения токена. Ниже мой код, но я продолжаю получать 400 плохих запросов. Наверное, мои коды просто неверны, и я буду признателен за любую помощь в этом. Ниже мои коды:C# JSON Сообщение с использованием HttpWebRequest
static public string GetAuthorizationToken()
{
string token = string.Empty;
string requestUrl = "some URL";
HttpWebRequest httpWebRequest = WebRequest.Create(requestUrl) as HttpWebRequest;
httpWebRequest.Method = "POST";
httpWebRequest.ContentType = "x-www-form-urlencoded";
Dictionary<string, string> postParameters = new Dictionary<string, string>();
postParameters.Add("grant", "some credentials");
postParameters.Add("id", "1234123411");
postParameters.Add("secret", "1234123411");
postParameters.Add("scope", "abcd");
string postData = "";
foreach (string key in postParameters.Keys)
{
postData += WebUtility.UrlEncode(key) + "="
+ WebUtility.UrlEncode(postParameters[key]) + "&";
}
byte[] data = Encoding.ASCII.GetBytes(postData);
httpWebRequest.ContentLength = data.Length;
Stream requestStream = httpWebRequest.GetRequestStream();
requestStream.Write(data, 0, data.Length);
requestStream.Close();
TokenResponse tokenResponse = new TokenResponse();
using (HttpWebResponse response = httpWebRequest.GetResponse() as HttpWebResponse)
{
if (response.StatusCode != HttpStatusCode.OK)
throw new Exception(String.Format(
"Server error (HTTP {0}: {1}).",
response.StatusCode,
response.StatusDescription));
DataContractJsonSerializer responseSerializer = new DataContractJsonSerializer(typeof(TokenResponse));
Stream responseStream = response.GetResponseStream();
object objResponse = responseSerializer.ReadObject(responseStream);
tokenResponse = objResponse as TokenResponse;
response.Close();
if (tokenResponse != null)
{
return tokenResponse.accessToken;
}
}
return token;
}
Тип контента неверен для тела запроса JSON. Попробуйте «application/json» вместо «x-www-form-urlencoded» (который предназначен для стандартных данных строки запроса) – Quintium
Спасибо Quintium. Вероятно, моя ошибка заключалась в использовании JSON в запросе, в то время как тип содержимого предназначен для данных строки запроса. Я обновил коды ниже и по-прежнему получаю 400 ошибок с ошибкой. – BanggaDad
Может быть полностью несвязанным, но обычно данные аутентификации отправляются в заголовке, и может ли это быть причиной? –