在HttpClient的标头中提供api密钥不起作用

时间:2016-05-05 00:37:08

标签: c# rest asp.net-web-api dotnet-httpclient

我试图从https://ndb.nal.usda.gov获取数据,基于此处提供的说明https://ndb.nal.usda.gov/ndb/doc/apilist/API-FOOD-REPORT.md

我使用HttpClient如下,但似乎无法正确传递api_key。我不应该将它添加到标题中吗?我试过了

public static async Task<string> DownloadItemData(string itemName)
    {
        using (HttpClient client = new HttpClient())
        {
            HttpContent requestContent =
                new FormUrlEncodedContent(new[]
                {
                    new KeyValuePair<string, string>("api_key", "myKey"),
                    new KeyValuePair<string, string>("ndbno", "01009"),
                    new KeyValuePair<string, string>("type", "f")
                });

            requestContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");

            HttpResponseMessage response = await client.PostAsync("http://api.nal.usda.gov/ndb/reports", requestContent);

            using (StreamReader reader = new StreamReader(await response.Content.ReadAsStreamAsync()))
            {
                // Write the output.
                string result = await reader.ReadToEndAsync();
                return result;
            }
        }

但我得到的只是:

{
  "error": {
    "code": "API_KEY_MISSING",
    "message": "No api_key was supplied. Get one at http://api.nal.usda.gov"
  }
}

我也试过这个,但结果相同:

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("api_key", "myKey");

有关如何正确传递api_key的任何想法?提前谢谢!

0 个答案:

没有答案