タグ付けされた質問 「dotnet-httpclient」

NuGetのHttpClientパッケージの一部であるSystem.Net.Http.HttpClientライブラリ、または.NET 4.5ライブラリを参照します。

12
HttpClientとHttpClientHandlerはリクエスト間で破棄する必要がありますか?
System.Net.Http.HttpClientおよびSystem.Net.Http.HttpClientHandler.NET Framework 4.5のは、IDisposableを実装します(System.Net.Http.HttpMessageInvokerを介して)。 の using声明のドキュメントは言います: 原則として、IDisposableオブジェクトを使用する場合は、usingステートメントで宣言してインスタンス化する必要があります。 この回答はこのパターンを使用しています: var baseAddress = new Uri("http://example.com"); var cookieContainer = new CookieContainer(); using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer }) using (var client = new HttpClient(handler) { BaseAddress = baseAddress }) { var content = new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("foo", "bar"), …

6
await / asyncを使用すると、HttpClient.GetAsync(…)が返されない
編集: この質問は同じ問題のようですが、回答がありません... 編集:テストケース5では、タスクが停止したように見えますWaitingForActivation。 .NET 4.5でSystem.Net.Http.HttpClientを使用していくつかの奇妙な動作に遭遇しました-(たとえば)への呼び出しの結果を「待機」することhttpClient.GetAsync(...)は決して戻りません。 これは、新しいasync / await言語機能とTasks APIを使用する特定の状況でのみ発生します。継続のみを使用する場合、コードは常に機能するようです。 これが問題を再現するコードです。これをVisual Studio 11の新しい「MVC 4 WebApiプロジェクト」にドロップして、次のGETエンドポイントを公開します。 /api/test1 /api/test2 /api/test3 /api/test4 /api/test5 <--- never completes /api/test6 ここの各エンドポイントは、/api/test5決して完了しないことを除いて、同じデータ(stackoverflow.comからの応答ヘッダー)を返します。 HttpClientクラスでバグが発生したか、または何らかの方法でAPIを誤用していますか? 再現するコード: public class BaseApiController : ApiController { /// <summary> /// Retrieves data using continuations /// </summary> protected Task<string> Continuations_GetSomeDataAsync() { var httpClient = new HttpClient(); …

4
HttpClient BaseAddressが機能しないのはなぜですか?
がBaseAddress部分的なURIパスを定義する次のコードを考えます。 using (var handler = new HttpClientHandler()) using (var client = new HttpClient(handler)) { client.BaseAddress = new Uri("http://something.com/api"); var response = await client.GetAsync("/resource/7"); } これはへのGETリクエストを実行することを期待していますhttp://something.com/api/resource/7。しかし、そうではありません。 いくつか検索した後、私はこの質問と回答を見つけました:HttpClient with BaseAddress。の/最後に置くことをお勧めしBaseAddressます。 using (var handler = new HttpClientHandler()) using (var client = new HttpClient(handler)) { client.BaseAddress = new Uri("http://something.com/api/"); var response = await client.GetAsync("/resource/7"); …

2
HttpClient PostAsyncの2番目のパラメーターにHttpContentを設定するにはどうすればよいですか?
public static async Task<string> GetData(string url, string data) { UriBuilder fullUri = new UriBuilder(url); if (!string.IsNullOrEmpty(data)) fullUri.Query = data; HttpClient client = new HttpClient(); HttpResponseMessage response = await client.PostAsync(new Uri(url), /*expects HttpContent*/); response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); response.EnsureSuccessStatusCode(); string responseBody = await response.Content.ReadAsStringAsync(); return responseBody; } PostAsyncする必要がある別のパラメータを取りますHttpContent。 どのように設定しHttpContentますか?Windows Phone 8で機能するドキュメントはありません。 私がするならGetAsync、それは素晴らしい働きをします!しかし、key …

10
HttpClientがPostAsJsonAsyncメソッドをサポートしていないC#
WebアプリケーションからWeb APIを呼び出そうとしています。.Net 4.5を使用していますHttpClientが、コードの作成中にエラーが発生しましたが、定義PostAsJsonAsyncメソッドが含まれていません。 以下はコードです: HttpClient client = new HttpClient(); client.BaseAddress = new Uri("http://localhost:51093/"); client.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("application/json")); var user = new Users(); user.AgentCode = 100; user.Remarks = "Test"; user.CollectionDate = System.DateTime.Today; user.RemittanceDate = System.DateTime.Today; user.TotalAmount = 1000; user.OrgBranchID = 101; var response = client.PostAsJsonAsync("api/AgentCollection", user).Result; そして私はエラーメッセージを受け取ります: エラー:「System.Net.Http.HttpClient」には「PostAsJsonAsync」の定義が含まれておらず、タイプ「System.Net.Http.HttpClient」の最初の引数を受け入れる拡張メソッド「PostAsJsonAsync」が見つかりませんでした(見つからないディレクティブまたはアセンブリ参照を使用していますか?) 見て、アドバイスしてください。

7
HttpClientとWebClientの間の決定
私たちのWebアプリは.Net Framework 4.0で実行されています。UIはajax呼び出しを通じてコン​​トローラーメソッドを呼び出します。 ベンダーのRESTサービスを利用する必要があります。.Net 4.0でRESTサービスを呼び出す最良の方法を評価しています。RESTサービスは基本認証スキームを必要とし、XMLとJSONの両方でデータを返すことができます。巨大なデータをアップロード/ダウンロードする必要はなく、今後何も表示されません。RESTを使用するためのいくつかのオープンソースコードプロジェクトを調べたところ、プロジェクトに追加の依存関係を正当化するための価値が見つかりませんでした。評価WebClientを開始しましたHttpClient。NuGetから.Net 4.0用のHttpClientをダウンロードしました。 私は間の違いを検索WebClientし、HttpClientそしてこのサイトは、単一のHttpClientは同時コールを処理することができますし、それが解決DNS、クッキーの設定や認証を再利用できることを述べました。違いによって得られる実用的な値はまだわかりません。 WebClient(同期呼び出し)、HttpClient(同期および非同期)のパフォーマンスを確認するために、簡単なパフォーマンステストを行いました。そしてここに結果があります: HttpClientすべてのリクエストに同じインスタンスを使用する(最小-最大) WebClient同期:8 ms-167 ms HttpClient同期:3 ms-7228 ms HttpClient async:985-10405 ms HttpClientリクエストごとに新しいものを使用する(最小-最大) WebClient同期:4 ms-297 ms HttpClient同期:3 ms-7953 ms HttpClient async:1027-10834 ms コード public class AHNData { public int i; public string str; } public class Program { public static HttpClient httpClient = new …

6
HttpClient-タスクはキャンセルされましたか?
1つまたは2つのタスクがある場合は正常に動作しますが、複数のタスクがリストされている場合は、「タスクがキャンセルされました」というエラーがスローされます。 List<Task> allTasks = new List<Task>(); allTasks.Add(....); allTasks.Add(....); Task.WaitAll(allTasks.ToArray(), configuration.CancellationToken); private static Task<T> HttpClientSendAsync<T>(string url, object data, HttpMethod method, string contentType, CancellationToken token) { HttpRequestMessage httpRequestMessage = new HttpRequestMessage(method, url); HttpClient httpClient = new HttpClient(); httpClient.Timeout = new TimeSpan(Constants.TimeOut); if (data != null) { byte[] byteArray = Encoding.ASCII.GetBytes(Helper.ToJSON(data)); MemoryStream memoryStream …

6
同期接続にHttpClientを使用する理由
APIと対話するためのクラスライブラリを構築しています。APIを呼び出してXML応答を処理する必要があります。HttpClient非同期接続に使用することの利点はわかりますが、私がしていることは純粋に同期であるため、を使用することよりも大きな利点はありませんHttpWebRequest。 誰かが光を当てることができれば私はそれを大いに感謝します。私はそれのために新しいテクノロジーを使用するためのものではありません。


7
WebAPIクライアントで呼び出しごとに新しいHttpClientを作成するオーバーヘッドは何ですか?
HttpClientWebAPIクライアントの存続期間はどうあるべきですか?複数の呼び出しに対しての インスタンスを1つ持つ方が良いHttpClientですか? HttpClient以下の例のように、リクエストごとに作成および破棄するオーバーヘッドは何ですか(http://www.asp.net/web-api/overview/web-api-clients/calling-a-web-api-from-から取得)a-net-client): using (var client = new HttpClient()) { client.BaseAddress = new Uri("http://localhost:9000/"); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); // New code: HttpResponseMessage response = await client.GetAsync("api/products/1"); if (response.IsSuccessStatusCode) { Product product = await response.Content.ReadAsAsync<Product>(); Console.WriteLine("{0}\t${1}\t{2}", product.Name, product.Price, product.Category); } }

3
HttpClientへのHttpヘッダーの追加
すべて: Webサービスにリクエストを送信する前に、HttpClientにhttpヘッダーを追加する必要があります。(HttpClientですべての将来の要求とは対照的に)個々の要求に対してどうすればよいですか?これが可能かどうかはわかりません。 var client = new HttpClient(); var task = client.GetAsync("http://www.someURI.com") .ContinueWith((taskwithmsg) => { var response = taskwithmsg.Result; var jsonTask = response.Content.ReadAsAsync<JsonObject>(); jsonTask.Wait(); var jsonObject = jsonTask.Result; }); task.Wait();

13
HttpClientを使用してHttps呼び出しを行う
私はHttpClientC#を使用してWebApi呼び出しを行うために使用しています。に比べてすっきりと速い方法のようWebClientです。しかし、Https電話をしている間に立ち往生しています。 Https呼び出しを行うために以下のコードをどのように作成できますか? HttpClient httpClient = new HttpClient(); httpClient.BaseAddress = new Uri("https://foobar.com/"); httpClient.DefaultRequestHeaders.Accept.Clear(); httpClient.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("application/xml")); var task = httpClient.PostAsXmlAsync<DeviceRequest>( "api/SaveData", request); 編集1: 上記のコードはhttp呼び出しを行うために正常に動作します。しかし、スキームをhttpsに変更すると機能しません。取得したエラーは次のとおりです。 基になる接続が閉じられました:SSL / TLSセキュアチャネルの信頼関係を確立できませんでした。 編集2: スキームをhttpsに変更するには、ステップ1を実行します。 C#リクエストと共に証明書と公開鍵/秘密鍵を提供するにはどうすればよいですか。

6
httpClient.GetAsyncを使用する場合のヘッダーの追加
私は、Apiary.ioを使用して他の同僚が作成したAPIをWindowsストアアプリプロジェクトに実装しています。 彼らは私が実装しなければならないメソッドのこの例を示しています: var baseAddress = new Uri("https://private-a8014-xxxxxx.apiary-mock.com/"); using (var httpClient = new HttpClient{ BaseAddress = baseAddress }) { using (var response = await httpClient.GetAsync("user/list{?organizationId}")) { string responseData = await response.Content.ReadAsStringAsync(); } } これと他のいくつかのメソッドでは、以前に取得したトークンを含むヘッダーが必要です。 これが、私が話しているヘッダー付きのPostman(クロム拡張)の画像です。 そのAuthorizationヘッダーをリクエストに追加するにはどうすればよいですか?

3
HttpClientを同時に使用しても安全ですか?
私が使用できるすべての例でHttpClient、1回限りの呼び出しに使用されます。しかし、複数の要求を同時に行うことができる永続的なクライアント状況がある場合はどうなりますか?基本的に、client.PostAsyncの同じインスタンスに対して一度に2つのスレッドを呼び出しても安全ですかHttpClient。 私は実際にここで実験結果を探しているわけではありません。実際の例としては、単純にまとまりのあるもの(および永続的なもの)である可能性があり、失敗した例の場合は、構成の問題がある可能性があります。理想的には、HttpClientでの並行処理の問題に対する信頼できる回答を探しています。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.