Одна из вещей, которую вы можете сделать для решения этой проблемы, - это специально запросить формат json в своем ответе, добавив заголовки corrent-запроса
Accept: application/json
, попробуйте так, как надо
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
Теперь, если сервер обращает внимание на заголовки запроса, он вернет вам json.Это может быть значение по умолчанию xml, поскольку в вашем запросе такого заголовка нет ИЛИ сервер поддерживает только возврат ответов xml.
EDIT: если вы не можете заставить сервер вернуть json, вы можете преобразовать свой ответ строки xmlв строку json.Взгляните на этот пример .После преобразования вы можете нормально вернуть строку json с вашего контроллера.
Редактировать:
Хорошо, попробуйте этот пример ниже:
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("client_id", ""),
new KeyValuePair<string, string>("scope", ""),
new KeyValuePair<string, string>("grant_type", "authorization_code"),
new KeyValuePair<string, string>("redirect_uri", ""),
new KeyValuePair<string, string>("code", ""),
new KeyValuePair<string, string>("client_secret","")
});
AADTokenResponse TokenResponse = null;
string _baseAddress = string.Format("https://yourTargetDomain.com/");
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(_baseAddress);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var responseMessage = await client.PostAsync("targetApiSegment", content);
if (responseMessage.IsSuccessStatusCode)
{
var responseString = await responseMessage.Content.ReadAsStringAsync();
TokenResponse = JsonConvert.DeserializeObject<AADTokenResponse>(responseString);
}
}