Как установить несколько заголовков с помощью PostAsync в С#?
У меня есть рабочий код:
using (var client = new HttpClient())
{
HttpResponseMessage response;
response = client.PostAsync(Url, new StringContent(Request, Encoding.UTF8, header)).Result;
}
//выше это отлично работает для простого заголовка, например. "Приложения/JSON"
Что мне делать, если я хочу иметь несколько заголовков? Например. добавление пары "myKey", "foo" и "Accept", "image/foo1"
Если я попытаюсь добавить следующее до строки .Result, intellisense жалуется (слово "Заголовки" красным цветом с "Не удается разрешить символ" Заголовки ":
client.Headers.Add("myKey", "foo");
client.Headers.Add("Accept", "image/foo1");
Ответы
Ответ 1
Вы можете получить доступ к свойству Headers
через StringContent
:
var content = new StringContent(Request, Encoding.UTF8, header);
content.Headers.Add(...);
Затем передайте StringContent на вызов PostAsync
:
response = client.PostAsync(Url, content).Result;
Ответ 2
Я перестал использовать методы Post/Get * Async в пользу метода SendAsync(...)
и HttpRequestMessage
Send Async - это старший брат, который позволяет вам достичь полной гибкости, которую вы в противном случае не могли бы достичь.
using System.Net.Http;
var httpRequestMessage = new HttpRequestMessage();
httpRequestMessage.Method = httpMethod;
httpRequestMessage.RequestUri = new Uri(url);
httpRequestMessage.Headers
.UserAgent
.Add(new Headers.ProductInfoHeaderValue(
_applicationAssembly.Name,
_applicationAssembly.Version.ToString()));
HttpContent httpContent = new StringContent(json, Encoding.UTF8, "application/json");
switch (httpMethod.Method)
{
case "POST":
httpRequestMessage.Content = httpContent;
break;
}
var result = await httpClient.SendAsync(httpRequestMessage);
result.EnsureSuccessStatusCode();
Ответ 3
Вы также можете использовать
var client = new HttpClient();
client.DefaultRequestHeaders.TryAddWithoutValidation("headername","headervalue");
Если вы хотите просто установить заголовки для класса HttpClient только один раз. Вот документы MSDN по DefaultRequestHeaders.TryAddWithoutValidation