c#silverlight webclientコンテンツタイプの応答を取得しますか?
-
12-09-2019 - |
質問
WebClientを使用して、Silverlightで発信リクエストのコンテンツタイプのコンテンツタイプを取得するか、逆に設定する方法はありますか?
編集
HTTPリクエストを行い、それらに進捗を示すことができる必要があります。リクエストを一般的なモジュールにして、コードのどこでもそれを使用するために機械をパッケージ化したいと思います。これはすでにやっています。さまざまなタイプのデータを投稿のサーバーに送信する場合の難しさは、サーバーにデータが何であるかを伝える方法がありません(JSON、XML、フォームエンコード、バイナリ)
Content-Type = xをリクエストに合わせて、コンテンツタイプのヘッダーよりもサーバーを好むように設定することで、これに対処できると思います。
また、サーバーがどのようなコンテンツに応答するかを知る方法もありません。リクエストを行うときに、予想されるタイプのデータを渡すことでこれを解決できると思います。
誰かがより良い解決策を持っているなら、話してください:)
/編集
これが私の苦境です。 httpwebrequest/responseオブジェクトは、リクエストの進捗を監視できる内部インターフェイスを実装します。大規模なリクエストを実行したい場合は、ユーザーがダウンロード/アップロードのステータスを示す進捗バーを表示することが非常に重要です。
したがって、httpwebrequest/responseを使用してください。 WebClientだけを残しますが、私はそれについていくつかの奇妙なことを見つけています。
サブクラス化することはできません。実際には密閉されていませんが、コンストラクターには[SecuritySafeCritical]とマークされています。少なくとも私は失敗し、失敗したGoogleで他の人を見つけましたが、この点で間違っていることが証明されてとてもうれしいです。
内部的には、抽象ヘッダープロパティを無効にしないbrowserhttpwebreaponseを使用し、webclient.responseheadersはm_response.headersに転送します。
Content-TypeがResponseheadersにさえあるかどうかはわかりませんが、チェックしたいと思っていました。
Silverlightでは、進捗情報やコンテンツタイプの情報を持っているという不幸な選択があるようです。
ドキュメントによると、WebClientを使用して発信要求に合わせてコンテンツタイプを設定する方法もないようです。コンテンツタイプは、制限付きヘッダーとしてリストされています。私は実際にこれをテストしていません。
エラーでは、実際に応答オブジェクトに合格し、ステータスコード、コンテンツタイプなどにアクセスできることに注意することは興味深いことです。
解決
より簡単な解決策は、クライアント/サーバーコードにアップロード/ダウンロードをチャンクに分割し、一度に1つずつ送信することです。その後、各チャンクの後に進行状況バーを更新できます。もちろん、チャンクサイズが小さいほど、遅くなります。
また、クエリ文字列引数を介してそれがどのコンテンツタイプであるかをサーバーに伝えることができますか?