【问题标题】:Why an API does not recognise a HttpRequestMessage header value?为什么 API 无法识别 HttpRequestMessage 标头值?
【发布时间】:2017-05-15 08:31:31
【问题描述】:

我想将这个 CURL 命令转换为 C#:

curl -H "Api-Key: abc123" -H "Accept: application/vnd.com.some+json; version=9" https://api.someapi.io/somemethod?someParam=someparam

我在标题中设置 version=9 时遇到问题。我这样提出请求:

var request = new HttpRequestMessage()
            {
                RequestUri = new Uri(requestURL),
                Method = HttpMethod.Get
            };

            request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/vnd.com.some+json"));
            request.Headers.Add("Api-Key", apiKey);
            request.Headers.Add("version", "9");

            var httpHandler = new HttpClientHandler();

            var httpClient = new HttpClient(httpHandler);

            var response = await httpClient.SendAsync(request);

            var json = await response.Content.ReadAsStringAsync();

当我通过 curl 调用此请求时,它可以工作,并识别标头中定义的版本值。

从此 c# 代码调用 API 方法也可以,但 API 无法识别标头中定义的版本值(版本定义 API 版本)。请注意,我的其他标头值(apikey、mediatype)由 API 正确处理。

我的代码中遗漏了什么?

非常感谢!

【问题讨论】:

  • 在您的 curl 命令中,您的 version 位于 Accept 标头中,但在您的 c# 代码中,您将其添加为单独的标头。故意的?
  • 同理,不应该是request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/vnd.com.some+json; version=9")); 而不是request.Headers.Add("version", "9");
  • 它不起作用,我试过了:mscorlib.dll 中发生了“System.FormatException”类型的异常,但未在用户代码中处理。格式无效application/vnd.com.some+json;版本=9

标签: c# curl http-headers


【解决方案1】:

所以,我终于找到了解决办法:

request.Headers.Add("Accept", "application/vnd.com.some+json;version=9");
request.Headers.Add("Api-Key", apiKey);

感谢大家的帮助!

【讨论】:

    猜你喜欢
    • 2022-08-18
    • 2020-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-13
    • 2021-04-27
    相关资源
    最近更新 更多