HttpClient 요청에 대한 사용자 정의 헤더
사용자 지정 헤더를 에 추가하려면 어떻게 합니까?HttpClient
요청?사용 중PostAsJsonAsync
JSON을 게시하는 방법.추가해야 할 사용자 지정 헤더는
"X-Version: 1"
지금까지 제가 해온 일은 다음과 같습니다.
using (var client = new HttpClient()) {
client.BaseAddress = new Uri("https://api.clickatell.com/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "xxxxxxxxxxxxxxxxxxxx");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = client.PostAsJsonAsync("rest/message", svm).Result;
}
저는 제 질문에 대한 답을 찾았습니다.
client.DefaultRequestHeaders.Add("X-Version","1");
그러면 사용자 지정 헤더가 요청에 추가됩니다.
다음은 아누비스(모든 요청에 대해 헤더를 수정하지 않기 때문에 더 나은 접근 방식)의 답변이지만 원래 질문의 코드와 더 일치합니다.
using Newtonsoft.Json;
...
var client = new HttpClient();
var httpRequestMessage = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://api.clickatell.com/rest/message"),
Headers = {
{ HttpRequestHeader.Authorization.ToString(), "Bearer xxxxxxxxxxxxxxxxxxx" },
{ HttpRequestHeader.Accept.ToString(), "application/json" },
{ "X-Version", "1" }
},
Content = new StringContent(JsonConvert.SerializeObject(svm))
};
var response = client.SendAsync(httpRequestMessage).Result;
var request = new HttpRequestMessage {
RequestUri = new Uri("[your request url string]"),
Method = HttpMethod.Post,
Headers = {
{ "X-Version", "1" } // HERE IS HOW TO ADD HEADERS,
{ HttpRequestHeader.Authorization.ToString(), "[your authorization token]" },
{ HttpRequestHeader.ContentType.ToString(), "multipart/mixed" },//use this content type if you want to send more than one content type
},
Content = new MultipartContent { // Just example of request sending multipart request
new ObjectContent<[YOUR JSON OBJECT TYPE]>(
new [YOUR JSON OBJECT TYPE INSTANCE](...){...},
new JsonMediaTypeFormatter(),
"application/json"), // this will add 'Content-Type' header for the first part of request
new ByteArrayContent([BINARY DATA]) {
Headers = { // this will add headers for the second part of request
{ "Content-Type", "application/Executable" },
{ "Content-Disposition", "form-data; filename=\"test.pdf\"" },
},
},
},
};
있습니다.Headers
의 재산.HttpRequestMessage
클래스. 각 HTTP 요청과 함께 전송되는 사용자 지정 헤더를 추가할 수 있습니다.그DefaultRequestHeaders
에서HttpClient
그러나 class는 해당 클라이언트 개체를 사용하여 전송되는 각 요청과 함께 전송할 헤더를 설정하므로 기본 요청 헤더라는 이름을 사용합니다.
이것이 적어도 미래에 이 답을 보는 누군가를 위해 상황을 더 명확하게 만들기를 바랍니다.
아래와 같이 HttpClient 헤더에 x-api-version을 추가했습니다.
var client = new HttpClient(httpClientHandler)
{
BaseAddress = new Uri(callingUrl)
};
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Add("x-api-version", v2);
내 2센트.허그의 말에 동의합니다.받아들여진 대답은 마음을 누그러뜨리는 것입니다.한 발짝 뒤로.
기본 헤더는 특정 HttpClient에서 요청한 모든 요청에 적용됩니다.따라서 공유 헤더에는 기본 헤더를 사용합니다.
_client.DefaultRequestHeaders.UserAgent.ParseAdd(_options.UserAgent);
그러나 특정 요청에 대한 헤더가 필요한 경우도 있습니다.따라서 다음과 같은 방법을 사용합니다.
public static async Task<HttpResponseMessage> GetWithHeadersAsync(this
HttpClient httpClient, string requestUri, Dictionary<string, string> headers)
{
using (var request = new HttpRequestMessage(HttpMethod.Get, requestUri))
{
foreach(var header in headers)
{
request.Headers.Add(header.Key, header.Value);
}
return await httpClient.SendAsync(request);
}
}
기본값이 아닌 헤더가 하나만 추가로 필요한 경우 다음을 사용합니다.
request.Headers.Add("X-Version","1")
추가 도움말:HttpClient 사용 시 요청 헤더를 추가하는 방법
또한 HttpClient를 사용할 수 있습니다.PostAsync 메서드:
using (HttpClient http_client = new HttpClient())
{
StringContent string_content = new StringContent(JsonSerializer.Serialize("{\"field\":\"field_value\"}"));
string_content.Headers.Add("X-Version","1");
using (HttpResponseMessage response = await http_client.PostAsync("http://127.0.0.1/apiMethodName", string_content))
{
if (response.IsSuccessStatusCode)
{
Console.WriteLine($"Response status code: {response.StatusCode}");
}
else
{
Console.WriteLine($"Error status code: {response.StatusCode}");
}
}
}
누군가 httpClient를 어떻게 불러야 할지 궁금할 때를 대비해서요.HttpRequestMessage가 사용자 지정 헤더를 제공하는 오버로드가 없는 GetStreamAsync() @Anubis에서 제공한 위의 코드를 사용하여 호출할 수 있습니다.
await response.Content.ReadAsStreamAsync()
Range Header를 FileStream Result로 사용하여 Bloburl을 반환하는 경우 특히 유용합니다.
언급URL : https://stackoverflow.com/questions/35907642/custom-header-to-httpclient-request
'programing' 카테고리의 다른 글
Node.js의 HTML 파서 (0) | 2023.05.21 |
---|---|
VB.NET 'If' 문에 'Or' 조건부가 모두 평가되었습니까? (0) | 2023.05.21 |
메모리의 Python 목록 크기 (0) | 2023.05.21 |
파이썬에서 집합을 목록으로 변환하는 방법은 무엇입니까? (0) | 2023.05.21 |
git log'로 첫 번째 커밋을 표시하는 방법은 무엇입니까? (0) | 2023.05.21 |