如何在 httpclient 中将 header 添加到 GetAsync
how to add header to GetAsync in httpclient
我要将一个ps项目转成C#,不熟悉C#访问webapi的操作
下面是 PS 中的代码,它运行得非常好。
PowerShell 代码:
$api_key = [myKey]
$header = @{"x-api-key"=$api_key}
$uri = [myURI]
$resp = invoke-webrequest -uri $uri -method get -headers
在 C# 中,我使用 HttpClient 和 GetAsync 方法来检索资源。我的问题是我不确定如何
将包含我的 apiKey 的 header 插入站点。
我的代码是:
private static HttpClient _httpClient = new HttpClient();
var response = await _httpClient.GetAsync([myURI]);
因为请求中没有包含我的密钥,所以我得到了 401 错误(未授权操作)。
我知道出了什么问题,但我不知道如何解决。我在 GetAsync 中看不到任何允许 header 的地方。也许我应该使用不同的方法?
基本上,我想将上面的 PS 片段转换为 C# .netcore。
请指教
您应该使用 HttpRequestMessage
模式来执行此操作。例如:
using (var msg = new HttpRequestMessage(HttpMethod.Get, fromUri))
{
msg.Headers.Add("x-header-test", "the value");
using (var resp = await _client.SendAsync(msg))
{
resp.EnsureSuccessStatusCode();
return await resp.Content.ReadAsStringAsync();
}
}
使用 (var httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Add("token", "sample token");
JObject data = JObject.Parse(inputData);
var content = new StringContent(JsonConvert.SerializeObject(data, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore })); //using Newtonsoft.Json
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var response = await httpClient.PostAsync(url, content).ConfigureAwait(false);
await response.Content.ReadAsStringAsync().ContinueWith((Task<string> x) =>
{
if (!response.IsSuccessStatusCode)
{
throw new Exception(x.Result);
}
else
{
JObject output = x.Result;
}
}
}
我要将一个ps项目转成C#,不熟悉C#访问webapi的操作 下面是 PS 中的代码,它运行得非常好。
PowerShell 代码:
$api_key = [myKey]
$header = @{"x-api-key"=$api_key}
$uri = [myURI]
$resp = invoke-webrequest -uri $uri -method get -headers
在 C# 中,我使用 HttpClient 和 GetAsync 方法来检索资源。我的问题是我不确定如何 将包含我的 apiKey 的 header 插入站点。
我的代码是:
private static HttpClient _httpClient = new HttpClient();
var response = await _httpClient.GetAsync([myURI]);
因为请求中没有包含我的密钥,所以我得到了 401 错误(未授权操作)。 我知道出了什么问题,但我不知道如何解决。我在 GetAsync 中看不到任何允许 header 的地方。也许我应该使用不同的方法?
基本上,我想将上面的 PS 片段转换为 C# .netcore。
请指教
您应该使用 HttpRequestMessage
模式来执行此操作。例如:
using (var msg = new HttpRequestMessage(HttpMethod.Get, fromUri))
{
msg.Headers.Add("x-header-test", "the value");
using (var resp = await _client.SendAsync(msg))
{
resp.EnsureSuccessStatusCode();
return await resp.Content.ReadAsStringAsync();
}
}
使用 (var httpClient = new HttpClient()) {
httpClient.DefaultRequestHeaders.Add("token", "sample token");
JObject data = JObject.Parse(inputData);
var content = new StringContent(JsonConvert.SerializeObject(data, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore })); //using Newtonsoft.Json
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var response = await httpClient.PostAsync(url, content).ConfigureAwait(false);
await response.Content.ReadAsStringAsync().ContinueWith((Task<string> x) =>
{
if (!response.IsSuccessStatusCode)
{
throw new Exception(x.Result);
}
else
{
JObject output = x.Result;
}
}
}