Заголовок Content-Language выбрасывает ошибку имени неправильно используемого заголовка при вызове Ebay API - PullRequest
0 голосов
/ 30 октября 2018

Когда я делаю PUT-запрос к CreateOrReplaceInventoryItem, используя Ebay API, я получаю эту ошибку:

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

Приведенный ниже код выдает ошибку.

using (var client = new HttpClient())
{
    var baseUri = new Uri(string.Format("https://api.sandbox.ebay.com/sell/inventory/v1/inventory_item/{0}", SKU));
    client.DefaultRequestHeaders.Add("Authorization", string.Format("Bearer {0}", token));
    client.DefaultRequestHeaders.Add("Content-Language", "en-US");

    var payload = JsonConvert.SerializeObject(product);
    var content = new StringContent(payload, Encoding.UTF8, "application/json");

    var response = client.PutAsync(baseUri, content).Result;
    return response.Content.ReadAsStringAsync().Result;
}

Если я уберу строку:

client.DefaultRequestHeaders.Add("Content-Language", "en-US");

Затем я получаю возвращенный объект ошибки:

errors":[{"errorId":25709,"domain":"API_INVENTORY","subdomain":"Selling","category":"REQUEST","message":"Invalid value for header Content-Language."}]} 

Что я делаю не так? Есть ли другой способ установить язык содержимого, о котором я не знаю?

1 Ответ

0 голосов
/ 28 декабря 2018

Поскольку Content-Language является заголовком содержимого, вы должны назначить его в экземпляре HttpContent вместо DefaultRequestHeaders. Исходя из вашего кода будет что то вроде этого:

using (var client = new HttpClient())
{
    var baseUri = new Uri(string.Format("https://api.sandbox.ebay.com/sell/inventory/v1/inventory_item/{0}", SKU));
    client.DefaultRequestHeaders.Add("Authorization", string.Format("Bearer {0}", token));

    var payload = JsonConvert.SerializeObject(product);
    var content = new StringContent(payload, Encoding.UTF8, "application/json");
    content.Headers.Add("Content-Language", "en-US");

    var response = client.PutAsync(baseUri, content).Result;
    return response.Content.ReadAsStringAsync().Result;
}
...