[C#] httpClient.GetAsync를 사용할 때 헤더 추가

Windows 스토어 앱 프로젝트에서 Apiary.io와 다른 동료가 만든 API를 구현하고 있습니다.

그들은 내가 구현 해야하는이 방법의 예를 보여줍니다.

var baseAddress = new Uri("https://private-a8014-xxxxxx.apiary-mock.com/");

using (var httpClient = new HttpClient{ BaseAddress = baseAddress })
{
    using (var response = await httpClient.GetAsync("user/list{?organizationId}"))
    {
        string responseData = await response.Content.ReadAsStringAsync();
    }
}

이 방법과 다른 방법에서는 이전에 얻은 토큰이있는 헤더가 필요합니다.

다음은 내가 말하고있는 헤더가있는 Postman (크롬 확장) 이미지입니다.
여기에 이미지 설명을 입력하십시오

해당 Authorization 헤더를 요청에 어떻게 추가합니까?



답변

HttpClient와 함께 GetAsync를 사용할 때 다음과 같이 인증 헤더를 추가 할 수 있습니다.

httpClient.DefaultRequestHeaders.Authorization 
                         = new AuthenticationHeaderValue("Bearer", "Your Oauth token");

이것은 HttpClient의 수명 동안 인증 헤더를 추가하므로 인증 헤더가 변경되지 않는 한 사이트를 방문하는 경우 유용합니다.

자세한 답변 은 다음과 같습니다.


답변

나중에 대답하지만 아무도이 솔루션을 제공하지 않았기 때문에 …

당신이에 헤더 설정하지 않으려면 HttpClient받는 사람에 추가하여 인스턴스를 DefaultRequestHeaders, 당신은 요청에 따라 헤더를 설정할 수 있습니다 .

그러나이 SendAsync()방법 을 사용해야합니다 .

이 방법 을 재사용하려는 경우HttpClient 올바른 솔루션 입니다.

다음과 같이 사용하십시오.

using (var requestMessage =
            new HttpRequestMessage(HttpMethod.Get, "https://your.site.com"))
{
    requestMessage.Headers.Authorization =
        new AuthenticationHeaderValue("Bearer", your_token);
    httpClient.SendAsync(requestMessage);
}


답변

수락 된 답변은 효과가 있지만 수락 헤더를 추가하려고하면 복잡해질 수 있습니다. 이것이 내가 끝낸 것입니다. 그것은 나에게 더 단순 해 보이므로 앞으로 그것을 고수 할 것이라고 생각합니다.

client.DefaultRequestHeaders.Add("Accept", "application/*+xml;version=5.1");
client.DefaultRequestHeaders.Add("Authorization", "Basic " + authstring);


답변

에 필요한 헤더를 추가 할 수 있습니다 HttpClient.

여기에 좋은 튜토리얼 이 있습니다.

이것은 POST 요청을 참조하는 것이 아니라 GET 요청에도 사용할 수 있습니다.


답변

greenhoorn의 답변에 따라 다음과 같이 “확장”을 사용할 수 있습니다.

  public static class HttpClientExtensions
    {
        public static HttpClient AddTokenToHeader(this HttpClient cl, string token)
        {
            //int timeoutSec = 90;
            //cl.Timeout = new TimeSpan(0, 0, timeoutSec);
            string contentType = "application/json";
            cl.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(contentType));
            cl.DefaultRequestHeaders.Add("Authorization", String.Format("Bearer {0}", token));
            var userAgent = "d-fens HttpClient";
            cl.DefaultRequestHeaders.Add("User-Agent", userAgent);
            return cl;
        }
    }

그리고 사용하십시오 :

string _tokenUpdated = "TOKEN";
HttpClient _client;
_client.AddTokenToHeader(_tokenUpdated).GetAsync("/api/values")


답변

때로는이 코드 만 필요합니다.

 httpClient.DefaultRequestHeaders.Add("token", token);


답변