Как добавить настраиваемый заголовок в запрос 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;
}

Ответы (4)

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

В классе HttpRequestMessage есть свойство Headers. Вы можете добавить туда собственные заголовки, которые будут отправляться с каждым HTTP-запросом. С другой стороны, DefaultRequestHeaders в классе HttpClient устанавливает заголовки, которые будут отправляться с каждым запросом, отправленным с использованием этого клиентского объекта, отсюда и название Default Заголовки запроса .

Надеюсь, это проясняет ситуацию, по крайней мере, для тех, кто увидит этот ответ в будущем.

Я нашел ответ на свой вопрос.

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;

2022 WebDevInsider