[C#] HttpClient 요청에 대한 사용자 정의 헤더

HttpClient요청에 커스텀 헤더를 어떻게 추가 합니까? PostAsJsonAsyncJSON을 게시하는 방법을 사용 하고 있습니다. 추가해야 할 맞춤 헤더는

"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;
}



답변

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\"" },
            },
        },
    },
};


답변

내 질문에 대한 답을 찾았습니다.

client.DefaultRequestHeaders.Add("X-Version","1");

요청에 맞춤 헤더를 추가해야합니다.


답변

다음은 Anubis의 답변을 기반으로합니다 (모든 요청에 ​​대해 헤더를 수정하지 않으므로 더 나은 접근 방법이지만 원래 질문의 코드와 동일합니다).

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 xxxxxxxxxxxxxxxxxxxx" },
                { HttpRequestHeader.Accept.ToString(), "application/json" },
                { "X-Version", "1" }
            },
            Content = new StringContent(JsonConvert.SerializeObject(svm))
        };

    var response = client.SendAsync(httpRequestMessage).Result;


답변

클래스 에는 Headers속성 이 있습니다 HttpRequestMessage. 여기에 사용자 정의 헤더를 추가 할 수 있으며, 각 헤더는 HTTP 요청과 함께 전송됩니다. 반면 DefaultRequestHeadersHttpClient클래스 의 는 해당 클라이언트 객체를 사용하여 전송 된 각 요청과 함께 헤더가 전송되도록 설정하므로 기본 요청 헤더 라는 이름이 설정 됩니다.

적어도 미래 에이 답변을 보는 사람에게는 이것이 더 명확하게되기를 바랍니다.


답변