Мы используем расширения HttpClient для вызова веб-службы из веб-приложения в Visual Studio 2013. Иногда, когда мы вызываем метод PostAsJsonAsync, мы получаем эту ошибку «Метод не найден:« Void Newtonsoft.Json.Serialization.DefaultContractResolver.set_IgnoreSerializableAttribute (Boolean)» "Наш код выглядит следующим образом:
using (var client = new HttpClient())
{
client.SetAuthenticationHeader();
client.SetServiceBaseAddress();
var response = await client.PostAsJsonAsync("publishfile/", publishFileDto);
if (response.IsSuccessStatusCode)
{
RedirectToAction("Certificates");
}
ModelState.AddModelError("File", "Failed to upload file");
}
Мы перепробовали множество решений, предлагаемых на stackoverflow, и ни одно из них не сработало. Мы обновили все библиотеки зависимостей до последней версии, особенно Microsoft.AspNet.WebApi.Client и Newtonsoft.Json, мы также попытались понизить версию, но нам все равно не повезло. Я также открыл папку пакетов в проводнике и убедился, что ни одна библиотека не имеет нескольких версий, которые не используются, например, у Newtosoft.Json было много версий от 6.0.1 до 7.0.1.
Мы попробовали эти предлагаемые решения:
HttpClient не поддерживает метод PostAsJsonAsync C#
Я также проверил это:
что мало помогло.
Ниже приведена часть информации о трассировке стека.
[MissingMethodException: Method not found: 'Void Newtonsoft.Json.Serialization.DefaultContractResolver.set_IgnoreSerializableAttribute(Boolean)'.]
System.Net.Http.Formatting.JsonContractResolver..ctor(MediaTypeFormatter formatter) +0
System.Net.Http.Formatting.BaseJsonMediaTypeFormatter..ctor() +84
System.Net.Http.Formatting.JsonMediaTypeFormatter..ctor() +113
System.Net.Http.HttpClientExtensions.PostAsJsonAsync(HttpClient client, String requestUri, T value, CancellationToken cancellationToken) +61
System.Net.Http.HttpClientExtensions.PostAsJsonAsync(HttpClient client, String requestUri, T value) +132
Странно то, что иногда исключение не выбрасывается, объект сериализуется и отправляется в веб-службу, и все работает нормально. Позже, когда мы снова выполним тот же код, мы получим исключение.
Мы достигли точки, когда мы хотим рассмотреть другую библиотеку для выполнения вызовов веб-API.