调用 Ebay API 时,Content-Language 标头会抛出 Misused header name 错误

mar*_*ith 3 c# rest http-headers dotnet-httpclient ebay-api

当我使用 Ebay API 向 CreateOrReplaceInventoryItem 发出 PUT 请求时,出现以下错误:

误用标头名称。确保请求标头与 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;
}
Run Code Online (Sandbox Code Playgroud)

如果我删除该行:

client.DefaultRequestHeaders.Add("Content-Language", "en-US");
Run Code Online (Sandbox Code Playgroud)

然后我得到一个返回的错误对象:

errors":[{"errorId":25709,"domain":"API_INVENTORY","subdomain":"Selling","category":"REQUEST","message":"Invalid value for header Content-Language."}]} 
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?还有另一种我不知道的设置内容语言的方法吗?

小智 6

由于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;
}
Run Code Online (Sandbox Code Playgroud)