温馨提示:本文翻译自stackoverflow.com,查看原文请点击:c# - Bad Request error setting header in Ebay API
asp.net-mvc-4 c# ebay-api httpclient rest

c# - Ebay API中的错误请求错误设置标头

发布于 2020-04-29 15:09:05

我想寻求帮助,如何解决我的httpclient请求标题中的问题。这是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;
        }
    }
}

查看更多

提问者
Jen143
被浏览
40
Jen143 2020-02-21 10:26

通过不将请求转换为json而是作为对象发送,我能够解决此问题。尽管提供的错误非常笼统,无法识别主要问题。在询问某人在ebay集成方面有经验之后,主要问题是在标头中提供所有需要的内容。

 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中需要添加标题。

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;
        }