問題タブ [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# - await/async を使用すると HttpClient.GetAsync(...) が返されない
編集: この質問は同じ問題のように見えますが、回答がありません...
編集:テスト ケース 5 では、タスクがスタックWaitingForActivation
状態にあるように見えます。
.NET 4.5 で System.Net.Http.HttpClient を使用すると、いくつかの奇妙な動作が発生しました。(eg) への呼び出しの結果を「待機」すると、httpClient.GetAsync(...)
返されることはありません。
これは、新しい async/await 言語機能とタスク API を使用している特定の状況でのみ発生します。継続のみを使用すると、コードは常に機能するように見えます。
問題を再現するコードを次に示します。これを Visual Studio 11 の新しい「MVC 4 WebApi プロジェクト」にドロップして、次の GET エンドポイントを公開します。
ここの各エンドポイントは、完了しないことを除いて、同じデータ (stackoverflow.com からの応答ヘッダー) を返します/api/test5
。
HttpClient クラスでバグに遭遇したのでしょうか、それとも API を何らかの方法で誤用したのでしょうか?
再現するコード:
asp.net-web-api - HttpClient ReadAsAsync - 完了時に何かを行う
次のように、ASP.NET Web API からの応答を読み取るコードがあります。
応答/結果が返されたときに、何らかのメッセージを表示しようとしています。しかし、何も機能していないようです - 私のラベルは更新されません。
明らかに、私は何か間違ったことをしています - 応答が受信された後にユーザーにメッセージを表示するにはどうすればよいですか?
ティア
編集:
以下に示すように、私は次のように宣言しました。
TaskScheduler スケジューラ = TaskScheduler.FromCurrentSynchronizationContext();
「スケジューラ」に渡されました(両方のContinueWithsで試しました)が、それでも何も機能していないようです。実際、lblMessage.Text のブレークポイントに達していません。
c# - ホストごとに 2 つの接続という HttpWebRequest の制限は HttpClient に適用されますか?
ホストごとに 2 つの接続という (既定の) レート制限が System.Net.Http.HttpClient に適用されるかどうか、自信を持って知っている人はいますか。
あなたの情報源と、この制限をこのように引き上げることができるかどうか、またはそれを行うためのより良い/簡単な方法があるかどうかを述べてください.
また、リミッターの実装はありますか? たとえば、毎分 40 回の通話がトップですか?
Reactive Extensions hereを使用したスロットリング戦術に関する良い記事がありますが、HttpClient でそれを行う方法があるかどうか疑問に思っていました。
c# - ReadAsAsyncを使用するにはどうすればよいですかこのデータスキーマで?
現在NuGetで利用可能なバージョンであるSystem.Net.Http.HttpClientを使用して、json形式でサービスからデータを取得しています。データはおおよそ次のようになります。
私はHttpContentExtensions.ReadAsAsync<T>
そのjson文字列をオブジェクトグラフに逆シリアル化するために使用します。タイプ定義はおおよそ次のようになります。
children
ここに問題があります:私はアイテムのタイプがプロパティによって異なることを望みkind
ます。が「type1」の場合kind
、オブジェクトを逆シリアル化します...それを呼び出しましょうType1
。が「type3」の場合kind
、タイプのオブジェクトが必要ですType3
。
現在、aList<Type1>
またはaを逆シリアル化できますが、逆シリアルList<Type3>
化ロジックに2つを区別するように指示する方法がわかりません。
「type1」データオブジェクトと「type3」データオブジェクトのすべてのプロパティを単一の.NETタイプにマージできます。しかし、プロパティの数は十分に多いため、これは厄介になります。
JSONのプロパティの名前(この場合data
)が異なる場合は、それを使用して区別できます。たとえば、データが次のようになっている場合:
...次に、.NETで次のようなことを行うことができます。
しかし、私のデータスキーマはそのようには見えません。
データの内容によって逆シリアル化のタイプを選択することは可能ですか?つまり、1つのプロパティ(この場合は)の値を調べてkind
、別のプロパティ(この場合は)のコンテンツを逆シリアル化する方法を決定しますdata
。
または、ReadAsAsyncがJSONを逆シリアル化しようとする前に、JSONに作用するフィルターまたはトランスフォーマーを挿入することは可能ですか?
もしそうなら、どのように?
asp.net-web-api - 単体テスト シナリオでの asp.net WebApi を使用した HttpClient
WebAPI コントローラーをテストするための基礎として使用したい統合テストがあります。
最初は、WebAPI をセルフホスト モードでセットアップし、ローカルの Http を介してエンドツーエンドのテストを実行する必要があると考えていました。
ただし、後で WebApiContrib プロジェクトのテストを見て、WebAPI コントローラーへの正しいサービス ルートを使用して HttpServer をセットアップして HttpClient をセットアップできることに気付きました。セルフホストモードでWebApiを設定しなくても、コントローラーの単体テストができるようです。クライアントのリクエストに任意のドメイン名を入れることができ、HttpClient は自動的に正しいコントローラーにバインドされているようです。
いくつかのローカル プロセス間通信を使用して、またはサーバーが同じアプリ ドメインにあることを純粋に「見て」、したがってリフレクションを使用して、ここで HTTP トランスポートが発生していますか? これが起こるためにボンネットの下で何が起こっているのですか?
コード:
c# - System.Net.Http.HttpClientが302リダイレクトに従わないようにするにはどうすればよいですか?
アプリはclient.PostAsync()で投稿を送信します。302リダイレクトに従わないようにしたいと思います。
どうやって?
私はこの答えAllowAutoRedirect
で説明されているように設定できると思います。
HttpWebRequest
しかし、PostAsync()呼び出し内で使用するにはどうすればよいですか?
c# - PUTリクエストは400の不正なリクエストになります
HttpClientを使用してWebAPIメソッドに対してPUTリクエストを実行しようとしています。ほぼ同じPOSTリクエストが期待どおりに機能しますが、PUTリクエストの結果は400(Bad Request)エラーになります。何が間違っているのかわかりません。
これが私のWebAPIコントローラーコードです。
そして、これらのメソッドを呼び出そうとするクライアント側のコードを次に示します。POSTリクエストは次のようになります。
そして、機能しないPUTリクエストは次のようになります。
ご覧のとおり、機能を可能な限り削除しましたが、毎回PUTリクエストでエラーが発生します。
ちなみに、RestSharpクライアントを使用してPUTリクエストを正常に行うことができます。このコードは、APIメソッドを正常に呼び出します。
この方法で行うことの問題は、AddObjectを使用して渡したオブジェクトが、コントローラーメソッドに到達したときに文字列になってしまうことです。intを渡す場合、intを取得したいと思います。HttpClientはPOSTメソッドでこれを行うので、それを使用したかったのですが、PUTはエラーをスローします。そのため、残念ながら、完全なソリューションにはならない2つの半ば機能するソリューションで立ち往生しています。これを機能させるために、どちらのパターンについてもフィードバックをいただければ幸いです。
編集:
それは以下に言及されたので、ここに私の.ToJsonContent()
拡張メソッドがあります:
c#-4.0 - 301 HTTPステータスコードを受信したときに自動的にリダイレクトされないようにHttpClientを構成するにはどうすればよいですか?
リダイレクトするASP.NETWebAPIサービスについて考えてみます。
「api/this」へのPOSTデータが「api/that」にリダイレクトされることを確認しようとすると、次のテスト方法があります。
実際に発生するのは、HTTPステータスコードが正しいLocationヘッダーを使用してクライアントに送信され、HttpClientがそのURIに対して自動的にGETを実行することです。その結果、私のテストは決して合格しません。
サーバーの応答を確認できるように、301を受信したときに自動的にリダイレクトされないようにHttpClientを構成するにはどうすればよいですか?
c# - HttpClient リクエストの Content-Type ヘッダーをどのように設定しますか?
呼び出している API の要求に応じてContent-Type
、オブジェクトのヘッダーを設定しようとしています。HttpClient
以下のように設定してみましたContent-Type
:
Accept
ヘッダーを追加できますが、追加しようとするContent-Type
と次の例外がスローされます。
ヘッダー名の誤用。要求ヘッダーが で
HttpRequestMessage
、応答ヘッダーがHttpResponseMessage
で、コンテンツ ヘッダーがHttpContent
オブジェクトで使用されていることを確認してください。
リクエストにContent-Type
ヘッダーを設定するにはどうすればよいですか?HttpClient