Ответ 1
Установите "microsoft asp.net web api 2.2 клиентские библиотеки" из nuget и не обращайтесь к файлам system.net.http.dll и system.net.http.formatting.dll вручную. Если вы установите этот пакет, то также установит правильный json.net
Что-то, что я только что нашел в своем winforms приложении
Мое приложение выполняет http-вызов веб-службы Api следующим образом
HttpClient _client = new HttpClient();
_client.Timeout = new TimeSpan(0, 3, 0);
_client.BaseAddress = new Uri("http://Myserver/MyApp");
_client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = _client.PostAsJsonAsync("api/Addin", newObject).Result;
Ничего особенного, но как только вы установите Newtonsoft.Json(V6.0.3) через nuget
внезапно я получаю ошибку stackOverflow в строке кода HttpResponseMessage. удалить Newtonsoft, и проблема решена.
Проблема в том, что я должен был использовать библиотеку для сериализации/десериализации данных в другом месте в моей форме
Мое обходное решение заключалось в использовании другой библиотеки, я просто использую System.Runtime.Serialization.Json; но это все еще очень странно, нет?
Я также должен добавить, что это dotnet v4.0 (не 4.5), а мое приложение - объект VSTO COM, работающий в MsWord, как Add On
Я подозреваю, что ошибка в Newtonsoft
Установите "microsoft asp.net web api 2.2 клиентские библиотеки" из nuget и не обращайтесь к файлам system.net.http.dll и system.net.http.formatting.dll вручную. Если вы установите этот пакет, то также установит правильный json.net
У меня та же проблема! Я разрабатываю компонент dll, который будет использоваться из visual foxpro. Когда компонент использует PostAsJsonAsync, вы получаете ошибку "No se puede cargar el archivo o ensamblado" Newtonsoft.Json, Version = 6.0.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed 'ni una de Sus dependencias. El sistema no puede encontrar el archivo especificado.
Если вам нужен PostAsJsonAsync
метод PostAsJsonAsync
, вам лучше написать свой собственный метод расширения.
Я рекомендую удалить ссылку на Microsoft.AspNet.WebApi.Client
(когда я использую PostAsJsonAsync из этого пакета, он жалуется, что не может найти более старую версию Newtonsoft.Json, но дело в том, что мне нужна последняя версия. цели проекта .net Framework 4.7.2) так или иначе...
Вот код, который вы можете скопировать и вставить.
Я использовал полностью определенные имена, поэтому вам не нужно беспокоиться о добавлении операторов using
.
Я также использую библиотеку Newtonsoft.Json для сериализации объекта.
public static class HttpClientExt
{
public static async System.Threading.Tasks.Task<HttpResponseMessage> PostAsJsonAsync<T>(this HttpClient client, string requestUrl, T theObj)
{
var stringContent = new StringContent(
Newtonsoft.Json.JsonConvert.SerializeObject(theObj),
System.Text.Encoding.UTF8, "application/json");
return await client.PostAsync(requestUrl, stringContent);
}
}
Изменено из этого ответа: fooobar.com/questions/37288/...
Я получил ошибку после обновления до более новой версии пакета Newtonsoft.Json.
Удаление пакета самообслуживания Microsoft.AspNet.WebApi.Client и повторная установка его после обновления до нового пакета Newtonsoft.Json разрешили проблему для меня.