web-dev-qa-db-ja.com

C#でPostAsyncを使用して複数のヘッダーを設定するにはどうすればよいですか?

私はいくつかの作業コードを持っています:

using (var client = new HttpClient())
{
HttpResponseMessage response;
response = client.PostAsync(Url, new StringContent(Request, Encoding.UTF8, header)).Result;
}

//上記は、単純なヘッダー、たとえば「application/json」

複数のヘッダーが必要な場合はどうすればよいですか?例えば。 「myKey」、「foo」のペアと「Accept」、「image/foo1」を追加

.Result行の前に次の行を追加しようとすると、インテリセンスが不平を言います(「ヘッダー」という単語が赤くなり、「記号「ヘッダー」を解決できません」:

client.Headers.Add("myKey", "foo");
client.Headers.Add("Accept", "image/foo1");
16
n as

Headers を介して StringContent プロパティにアクセスできます。

var content = new StringContent(Request, Encoding.UTF8, header);
content.Headers.Add(...);

次に、StringContentをPostAsync呼び出しに渡します。

response = client.PostAsync(Url, content).Result;
27
SwDevMan81

SendAsync(...)メソッドを優先してPost/Get * Asyncメソッドの使用を中止し、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();
21
Mr. Young

あなたも使うことができます

var client = new HttpClient();
client.DefaultRequestHeaders.TryAddWithoutValidation("headername","headervalue");

HttpClientクラスのヘッダーを一度だけ設定したい場合。これが MSDN docs on DefaultRequestHeaders.TryAddWithoutValidation

5
kmcnamee