Получение недействительного типа контента, выполняющего вызов httpclient Delete. Что я делаю неправильно? - PullRequest
0 голосов
/ 02 июля 2019

Когда я пытаюсь выполнить приведенный ниже код, это просто приводит к неверному типу содержимого (с ошибкой 612).

Я пытаюсь удалить идентификатор из статического списка.Я могу добавить идентификаторы потенциальных клиентов или получить статический список потенциальных клиентов.

Выполненные мной вызовы post и get работают нормально, хотя выполняемые мной вызовы post требуют данных прямо в строке url (как в $"{endpointURL} / rest / v1 / lists / {listID} /leads.json?id= {leadID}"; если я добавлю идентификатор в качестве объекта json, он тоже не будет выполнен. Это может быть ключом к тому, что ячто-то не так с вызовом удаления.

string url = $"{endpointURL}/rest/v1/lists/{listID}/leads.json?id={leadID}";
HttpClient client = new HttpClient();
client.BaseAddress = new Uri(url);
client.DefaultRequestHeaders.Authorization = new 
AuthenticationHeaderValue("Bearer", _access_token);
HttpResponseMessage response = await client.DeleteAsync(url);

Ответ здесь всегда приводит к неверному типу содержимого.

Если я добавлю эту строку перед выполнением вызова deleteasync, это вызовет другую ошибкудаже до того, как он выполнит вызов deleteAsync.

client.DefaultRequestHeaders.Add("Content-Type", "application/json");

Ошибка: «Неправильное имя заголовка. Убедитесь, что заголовки запроса используются с HttpRequestMessage, заголовки ответа с HttpResponseMessage и заголовки содержимого с объектами HttpContent."

Ответы [ 2 ]

0 голосов
/ 04 июля 2019

Решение оказалось комбинацией пары предложений.

HttpClient client = new HttpClient();
client.BaseAddress = new Uri(url);

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Delete, data);
// The key part was the line below
request.Content = new StringContent(string.Empty, Encoding.UTF8, "application/json");

if (!string.IsNullOrEmpty(_access_token))
{
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _access_token);
}

HttpResponseMessage response = await client.SendAsync(request);

Это сработало для меня.

0 голосов
/ 02 июля 2019

Попробуйте использовать HttpRequestMessage в своем коде, как это

string url = $"{endpointURL}/rest/";
HttpClient client = new HttpClient
{
    BaseAddress = new Uri(url)
};

//I'm assuming you have leadID as an int parameter in the method signature
Dictionary<string, int> jsonValues = new Dictionary<string, int>();
jsonValues.Add("id", leadID);

//create an instance of an HttpRequestMessage() and pass in the api end route and HttpMethod
//along with the headers
HttpRequestMessage request = new HttpRequestMessage
    (HttpMethod.Delete, $"v1/lists/{listID}") //<--I had to remove the leads.json part of the route... instead I'm going to take a leap of faith and hit this end point with the HttpMethod Delete and pass in a Id key value pair and encode it as application/json
    {
        Content = new StringContent(new JavaScriptSerializer().Serialize(jsonValues), Encoding.UTF8, "application/json")
    };

request.Headers.Add("Bearer", _access_token);

//since we've already told the request what type of httpmethod we're using 
//(in this case: HttpDelete)
//we could just use SendAsync and pass in the request as the argument
HttpResponseMessage response = await client.SendAsync(request);
...