問題タブ [dotnet-httpclient]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - C#HttpClientを介してWebAPIにオブジェクトを送信する
WindowsFormアプリケーションがあり、List<>をWebAPIに送信したい
これがWindowsフォームアプリの私のコードです:
リストを取得するには、controller-methodに何を入力する必要がありますか?
mocking - モック HttpMessageHandler を使用するときに HttpClient で Cookie を管理する方法
HttpRequestMessage
インスタンスを渡し、インスタンスを受け取ることによってクラス ライブラリを呼び出す単体テストがありHttpResponseMessages
ます。この点では、WebApi のテストと非常によく似ていますApiController
。
私がテストしているコードは に Cookie を追加しHttpResponseMessage
、その後の着信HttpRequestMessage
呼び出しでそれらの Cookie が表示されることを期待しています。これは、ブラウザー (またはHttpWebRequest
) の動作です。
HttpClientHandler
リクエストは実際にはネットワーク上で行われていないため、使用していませんが、HttpMessageHandler
初期化したモックアップを使用して製品に渡されHttpClient
ます。したがって、での Cookie 処理にHttpClientHandler
はアクセスできません。必要な Cookie の動作を取得するには、 の Cookie を手動で解析してHttpResponseMessage
から、手動で にシリアル化する必要があるようHttpRequestMessage
です。これは、CookieContainer が Cookie を適切なリクエストに正しく適用するためのロジックも完全に省略しています。
もっと簡単な方法はありますか?
c# - .Net4.0に含まれているHttpClientクラスを使用してIISExpressで実行されているAsp.NetMVC4.0アクションにファイルをアップロードする方法
C/Sアプリケーションがあります。サーバーをAsp.NetMVC4.0で実装し、クライアントは.Net4.5で実行されます。
サーバー側にコントローラーアクションがあります。次のようになります。
ブラウザでテストするためのテストHTMLページを作成しました。期待通りに動作しました。
クライアント側では、HttpClientクラスを使用しますが、ファイルのアップロードが必要ない場合は完全に機能しました。しかし、何日も調査した後でも、IISExpressを実行しているデバッグマシンでこれを解決することはできません。すべての手がかりがにつながることがわかりましたがMultipartFormDataContent
、それらのサンプルコードをコピーしても、サーバー側はまだ何も取得できず、すべての引数は空であり、ファイルはありませんRequest.Files
。以前は、ファイルのアップロードに機能するHttpWebRequestに基づく独自のhttpヘルパークラスを持っていましたが、この新しいプロジェクトではHttpClientを使用することを好みます。
では、HttpClientを使用してサーバーにファイルをアップロードするにはどうすればよいですか?
c# - HttpClient と HttpClientHandler はリクエスト間で破棄する必要がありますか?
.NET Framework 4.5 のSystem.Net.Http.HttpClientとSystem.Net.Http.HttpClientHandlerは、( System.Net.Http.HttpMessageInvokerを介して) IDisposable を実装します。
using
ステートメントのドキュメントには次のように記載されています。
原則として、IDisposable オブジェクトを使用する場合は、using ステートメントで宣言してインスタンス化する必要があります。
この回答では、次のパターンを使用しています。
Dispose()
しかし、Microsoft からの最も目に見える例は、明示的または暗黙的に呼び出されません。例えば:
- HttpClient のリリースを発表した元のブログ記事。
- HttpClientの実際のMSDN ドキュメント。
- BingTranslateSample
- GoogleMapsサンプル
- 世界銀行サンプル
発表のコメントで、誰かが Microsoft の従業員に次のように尋ねました。
サンプルを確認したところ、HttpClient インスタンスで破棄アクションを実行していないことがわかりました。アプリで using ステートメントを使用して HttpClient のすべてのインスタンスを使用しましたが、HttpClient は IDisposable インターフェイスを実装しているため、これが正しい方法だと思いました。私は正しい道を進んでいますか?
彼の答えは次のとおりです。
一般的には正しいですが、.Net 4 では実際には混在しないため、「using」と async には注意する必要があります。.Net 4.5 では、「using」ステートメント内で「await」を使用できます。
ところで、同じ HttpClient を好きなだけ何度でも再利用できるので、通常、それらを常に作成/破棄することはありません。
2 番目の段落は、この質問には不要です。これは、HttpClient インスタンスを何回使用できるかについてではなく、不要になった後に破棄する必要があるかどうかについてです。
(更新: 実際、@DPeden によって以下に提供されているように、2 番目の段落が答えの鍵です。)
だから私の質問は:
現在の実装 (.NET Framework 4.5) では、HttpClient および HttpClientHandler インスタンスで Dispose() を呼び出す必要がありますか? 明確化: 「必要」とは、リソースの漏洩やデータ破損のリスクなど、処分しないことによる悪影響があるかどうかを意味します。
IDisposable を実装しているので、必要がない場合はとにかく「良い習慣」でしょうか?
必要な場合 (または推奨される場合)、上記のコードは安全に実装されていますか (.NET Framework 4.5 の場合)?
これらのクラスが Dispose() を呼び出す必要がない場合、なぜ IDisposable として実装されたのでしょうか?
必要な場合、または推奨される方法である場合、Microsoft の例は誤解を招くものまたは安全でないものですか?
c# - 単純な汎用オブジェクトのキャスト
HttpClient 呼び出しを使用して簡略化するために作成したメソッドがあります。メソッド HttpReponse.Content.ReadAsAsync().Result を使用して、API からの応答を取得します。
これはすべてうまくいきます。私の方法は次のようになります。
私の質問は、クエリが失敗した場合、空の型の T を返す必要があるということです。これは、私が作成したカスタム クラスであれば問題ありませんが、string や string[] などのオブジェクトでは機能しません。何か案は?
乾杯
NCBL
iis-7.5 - Accept-Encoding: gzip: コンテンツは 2 回 gzip 圧縮されています
IIS を使用して静的ファイルを提供しています。静的圧縮と動的圧縮の両方を有効にするように (GUI を使用して) IIS を構成しました。
HttpClient
次のように、ダウンロードに使用しています。
Fiddler を使用してトラフィックを検査していますが、最初の 1 つまたは 2 つの応答が圧縮されていないことがわかります。IIS がバックグラウンドでファイルを圧縮し、どこかにキャッシュしていると思います。ディスクに書き込まれるファイルは約 14MB (予想) です。
後のリクエストは圧縮されます。応答にヘッダーが表示Content-Encoding: gzip
され、ダウンロードされるファイルは約 360KB です。gzip
Cygwin のfile
コマンドで識別されるファイルです。
ただし、gzip -d
解凍に使用すると、660KB のファイルになり、それ自体が gzip で圧縮されたファイルであり、file
.
そのファイルを解凍すると、期待していた 14 MB のファイルが返されます。
では、ファイルが 2 回圧縮されるのはなぜですか?
asp.net-mvc-4 - Mvc コントローラーから WebApi を使用する - HttpClient または参照 API アセンブリ?
MVC アプリケーションと Web API を使用したソリューションがあります。それらは別々のプロジェクトとドメインにあります (CORS を使用)。コンシューマーを柔軟に追加できるように Web API として構築しましたが、現在、私の MVC アプリケーションが唯一のコンシューマーです。そのため、MVC コントローラー内で HttpClient を使用するか、ApiController を直接インスタンス化するかを検討しています。
どちらの場合も、依存性注入 (Autofac) を使用しているので、HttpClient にも ApiController にも、通常のようにコンストラクター パラメーターを介して注入できる種類のインターフェイスがないため、その構成方法も知りたいと思います。これを処理する方法がわからない。
注入されたインスタンスの有効期間スコープはどうあるべきですか? HttpClient は、各リクエストの後に破棄することが推奨されていないため、おそらくシングルトンにする必要があります。
注: API を呼び出すと、グラフの作成に使用される大規模なデータセットが返されます。そのため、Http を使用すると追加のオーバーヘッドが発生すると思われるため、HttpClient から少し離れています。ApiController を直接インスタンス化するのはアンチパターンですか?
ありがとう
c# - HttpClient 接続を試行する前に開いているポートをテストする
HttpClientクラスのさまざまなメソッド(GetAsync など) は、Uri オブジェクトまたは文字列を受け取り、指定された場所への接続を開こうとします。ただし、私の場合、リモートホストがリッスンしていない可能性が非常に高いです(ポートが閉じられており、積極的に拒否されます。LAN内にあります)。
特に、これらのメソッドがAggregateExceptionをスローしてからふるいにかける必要があるため、このシナリオを処理するために例外をキャッチすることに依存したくありません。
HttpClient クラス (リモート ホストは WebApi サービス) の利点を活用しながら、このシナリオを検出するより良い方法はありますか? TcpClient などを使用して、ポートがリッスンしているかどうかを事前に確認する必要がありますか? もちろん、これには呼び出し間の競合状態が含まれます。HttpMessageHandler を受け取るコンストラクターのオーバーロードが役立つことを願っていますが、WebRequestHandlerには何も飛び出していません...
c#-4.0 - HttpClientを使用してWeb ApiからPUTメソッドを呼び出す方法は?
Api 関数 (1st) を呼び出したい。HttpClientを使用した 2 番目の Api 関数から。しかし、常に404エラーが発生します。
1 つ目の API 関数( EndPoint : http : // localhost : xxxxx /api/Test/)
2 番目の API 関数
だから私の質問はそれです。メソッド パラメーターを HttpClient からオブジェクト配列として投稿できますか? モデルをメソッド パラメーターとして渡したくありません。
私のコードで間違っているのは何ですか?
コードを に変更した後、応答を取得できません
また
c#-4.0 - タスクから結果を返す方法、Async HttpClient 呼び出しを利用するには?
次のようなコード(1番目)を書くことはできますか
次のようなコード(2番目)を書くことはできますか
を使用して上記のPutメソッドを 呼び出したいHttpclient.PutAsJsonAsync()
。.Net 4.0 で?
またはそれを行うためのより良い方法はありますか?だから私は非同期呼び出しの恩恵を受けることができますか?