Ebay API 中的 Bad Request 错误设置 header

Bad Request error setting header in Ebay API

我想请教如何解决我的 httpclient 请求的 header 中的问题。 这是 ebay restful api 正在创建履行装运。我可以在 Postman 中创建,但是当我在 VS 中尝试它时,它无法处理错误错误的请求。下面是使用 postman 的屏幕截图。

下面的代码在 ASP.NET

private HttpClient CreateHttpClient()
{
    var client = new HttpClient();
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

    string baseAddress = WebApiBaseAddress;
    client.Timeout = new TimeSpan(0, 5, 59);
    client.BaseAddress = new Uri(baseAddress);
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Add("Authorization", string.Format("Bearer {0}", _cred.eBayToken));
    client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json; charset=utf-8");
    return client;
}

public HttpResponseMessage PostHttpResponse(string requestUri, object data)
{
    var stringPayload = JsonConvert.SerializeObject(data);
    var httpContent = new StringContent(stringPayload, Encoding.UTF8, "application/json");
    httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    httpContent.Headers.Add("Content-Language", "en-US");


    using (var client = CreateHttpClient())
    {
        try
        {
            HttpResponseMessage response = client.PostAsJsonAsync(requestUri, httpContent).Result;
            if (response.IsSuccessStatusCode)
            {
                return response;
            }
            else
            {
                GetErrorsResponse(response);
                throw new HttpRequestException(string.Format("There was an exception trying to post a request. response: {0}", response.ReasonPhrase));
            }
        }
        catch (HttpRequestException ex)
        {
            throw ex;
            //return null;
        }
    }
}

我能够通过不将请求转换为 json 而是作为 object 发送来解决问题。尽管提供的错误非常普遍,无法确定主要问题。在询问了在 ebay 集成方面有经验的人后,主要问题是在 headers 中提供所有需要的东西。

 public HttpResponseMessage PostHttpResponse(string requestUri, object data)
{
    using (var client = CreateHttpClient())
    {
        try
        {
            HttpResponseMessage response = client.PostAsJsonAsync(requestUri, data).Result;
            if (response.IsSuccessStatusCode)
            {
                return response;
            }
            else
            {
                GetErrorsResponse(response);
                throw new HttpRequestException(string.Format("There was an exception trying to post a request. response: {0}", response.ReasonPhrase));
            }
        }
        catch (HttpRequestException ex)
        {
            throw ex;
            //return null;
        }
    }
}

并且在httpclient中需要添加header.

private HttpClient CreateHttpClient()
        {
            var client = new HttpClient();
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

            string baseAddress = WebApiBaseAddress;
            if (string.IsNullOrEmpty(baseAddress))
            {
                throw new HttpRequestException("There is no base address specified in the configuration file.");
            }
            client.Timeout = new TimeSpan(0, 5, 59);
            client.BaseAddress = new Uri(baseAddress);
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Add("Authorization", string.Format("Bearer {0}", _cred.eBayToken));
            client.DefaultRequestHeaders.Add("Accept-Language", "en-US");
            client.DefaultRequestHeaders.Add("Accept-Charset", "utf-8");
            client.DefaultRequestHeaders.Add("Accept", "application/json");
            client.DefaultRequestHeaders.Add("LegacyUse", "true");
            return client;
        }