Пользовательский заголовок для запроса 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;
}
Ответы
Ответ 1
var request = new HttpRequestMessage {
RequestUri = new Uri(EnvironmentSetup.BaseAddress + "Folder"),
Method = HttpMethod.Post,
Headers = {
{ "X-Version", "1" },
{ HttpRequestHeader.Authorization.ToString(), "Basic " + EnvironmentSetup.GetAuthToken() },
{ HttpRequestHeader.ContentType.ToString(), "multipart/mixed" },
},
Content = new MultipartContent {
new ObjectContent<FolderWithDocuments>(new FolderWithDocuments {
Status = FolderStatus.Draft,
Users = new List<User> { EnvironmentSetup.User1, EnvironmentSetup.User2 },
}, new JsonMediaTypeFormatter(), "application/json"),
new ByteArrayContent(ResourceHelper.ReadResourceToByteArray("blank.pdf")) {
Headers = {
{ "Content-Type", "application/Executable" },
{ "Content-Disposition", "form-data; filename=\"test.pdf\"" },
},
},
},
};
Ответ 2
Я нашел ответ на свой вопрос.
client.DefaultRequestHeaders.Add("X-Version","1");
Это должно добавить пользовательский заголовок к вашему запросу
Ответ 3
Вот ответ, основанный на этом от 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.Access.ToString(), "application/json" },
{ "X-Version", "1" }
},
Content = new StringContent(JsonConvert.SerializeObject(svm))
};
var response = client.SendAsync(httpRequestMessage).Result;
Ответ 4
В классе HttpRequestMessage
есть свойство Headers
. Там вы можете добавить свои заголовки, которые будут отправляться с каждым HTTP-запросом. С другой стороны, DefaultRequestHeaders
в классе HttpClient
устанавливает заголовки, которые будут отправляться при каждом запросе, отправляемом с использованием этого объекта клиента, отсюда и название Заголовки запросов по умолчанию.
Надеюсь, это прояснит ситуацию, по крайней мере, для того, кто увидит этот ответ в будущем.