2

応答の Content-Type を取得する方法、または WebClient を使用して Silverlight で送信要求の Content-Type を逆に設定する方法はありますか?

編集

http リクエストを作成し、進行状況を表示できるようにする必要があります。リクエストを作成するための機構を汎用モジュールにパッケージ化し、それをコードのあらゆる場所で使用したいと考えています。これは私がすでにやったことです。POSTでサーバーにさまざまなタイプのデータを送信するときに問題があるようです。サーバーにデータが何であるかを伝える方法がありません(json、xml、フォームエンコード、バイナリ)

リクエストで ?content-type=x を渡し、サーバーが Content-Type ヘッダーよりもそれを優先するように設定することで、これに対処できると思います。

また、サーバーがどのようなコンテンツで応答するかを知る方法もありません。リクエストを行うときに、期待されるタイプのデータを渡すことでこれを解決できると思います。

誰かがより良い解決策を持っている場合は、話してください:)

/編集

これが私の苦境です。HttpWebRequest/Response オブジェクトは、要求の進行状況を監視できる内部インターフェイスを実装します。大規模なリクエストを行う場合、ユーザーがダウンロード/アップロードのステータスを示すプログレス バーを確認できるようにすることが非常に重要です。

したがって、HttpWebRequest/Response を使用することはできません。WebClient だけを残していますが、奇妙な点がいくつかあります。

サブクラス化することはできません。実際には封印されていませんが、コンストラクターは [SecuritySafeCritical] とマークされています。これは、私が知る限り、派生クラスから呼び出すことができないことを意味します。少なくとも私は失敗し、Google で失敗した人を見つけましたが、この点で間違っていることが証明されて非常に嬉しく思います。

内部的には、抽象 Headers プロパティをオーバーライドしない BrowserHttpWebResponse を使用し、WebClient.ResponseHeaders は単に NotImplementedException をスローする m_Response.Headers に転送します。

Content-Type が ResponseHeaders に含まれているかどうかはわかりませんが、確認したいと思います。

Silverlight では、進捗情報または Content-Type 情報を保持するという不幸な選択をしているようですが、両方を保持することはできません。

ドキュメントによると、WebClient を使用して送信要求に Content-Type を設定する方法もないようです。Content-Type は、制限付きヘッダーとしてリストされています。私は実際にこれをテストしていません。

エラーが発生した場合、実際には応答オブジェクトが渡され、StatusCode、Content-Type などにアクセスできることに注意してください。

4

3 に答える 3

0

より簡単な解決策は、クライアント/サーバーコードでアップロード/ダウンロードをチャンクに分割し、一度に1つずつ送信することです。次に、各チャンクの後にプログレスバーを更新できます。もちろん、チャンクサイズが小さいほど遅くなります。

また、クエリ文字列引数を使用して、サーバーにコンテンツタイプを通知できますか?

于 2009-10-07T19:11:38.600 に答える
0

WebClient と WebClient で DownloadProgressChanged イベントを使用してみましたか?

于 2009-08-11T04:41:31.880 に答える
0

サーバーがasp.netの場合はこのように、phpの場合はこのようにすることができます。これらはアップロードの進行状況の解決策です。ダウンロードの進行状況に合わせて変更できる場合がありますが、簡単ではありません。

アイデアは、アップロードを行うサーバーコードを書き直して進行状況をIDで保存し、クライアントがサーバーをポーリングして現在の進行状況を取得するというものです。

于 2009-10-07T19:09:29.570 に答える