5

私はC#\ XAML metro-uiアプリケーションを開発しています。私はいくつかのサービスを呼び出して、これにはHttpWebRequestを使いたいと思っています。以前の実現HttpWebRequestは、ContentLengthUserAgentのプロパティを含んでいます。しかし、WinRTの実現にはそれがありません。私はこのpostに記載されているアプローチを使用しようとしました。 UserAgentでは動作しますが、ContentLengthでは動作しません。 IはHeadersWindows8アプリケーションでHttpWebRequestにヘッダーを追加するには?

request.Headers["Content-length"] = Length; 
request.Headers["User-agent"] = UserAgent; 

を設定しようとしたが、例外を受信しました「『コンテンツ長』ヘッダは、適切なプロパティまたはメソッドを使用して変更されなければなりません。」

HeadersをWinRTで実現するHttpWebRequestに設定することは可能ですか?

+0

設定内容の長さを削除すると動作しますか? HttpWepRequestは送信しているコンテンツに基づいてコンテンツ長を計算するため、Content-Lengthを設定することはできません。 @LarryOsterman Nope。 –

+0

さらに 'Content-type'プロパティを設定する必要があります。だから私もそれをコメントする必要があります。リンクを介して記述されたアプローチについて:私はこれらのプロパティをコメントしたときに '400 Bad Request'を取得します。私が 'HttpWebRequest'のためにこれらのコメントを書いたとき、私はwebexceptionを取得しました'基本的な接続は閉じました:接続は予期せず閉じられました。 ' – RredCat

+0

Hmmm。私はHttpWebRequestのコンテンツ長の設定をブロックすることができます(コンテンツ長を計算できるので)。悪い要求は、送信されるメッセージに何か問題があることを意味します。あなたが送ったことをフィドラーが示していますか? –

答えて

12

HttpWebRequestは、WinRTの半廃止ステータスです。以前の.NETプラットフォームで以前に変更されたヘッダー値は、もはやそれで変更することができません。

HttpClientは、単純なAPIと完全な非同期サポートを備えたHttpWebRequestの新しく改良された代替品です。

Content-Lengthを指定したいので、サーバーに何かPOSTやPUTをしようとしていると思います。その場合は、PostAsync()またはPutAsync()を適切に使用することをお勧めします。

var req = new HttpClient(); 
    req.DefaultRequestHeaders.Add("User-agent", UserAgent); 
    req.DefaultRequestHeaders.Add("Content-length", Length); 
    return await req.PostAsync(RequestURL, Body); 

あなたは、おそらく実際にそれが自動的に本体の実際の長さに基づいて、これらの方法で含まれることになるため、Content-Lengthヘッダを指定する必要はありませんが、あなたはそれをいずれかの方法を試すことができます。

+0

ええ..あなたは正しいです。あなたの答えをありがとう。私は何かのようなもので遊んでいる。しかし、私は 'ボディ'が 'HttpContent'タイプであると見ることができますか?そしてあなたはあなたのパラメータを入れますね。 'HttpContent'のインスタンスにparamsをどのように置いたのか説明できますか? – RredCat

+0

私はそれを見つけた。私はパラメータ文字列を 'ASCII'にエンコードしました。しかし、それは完全な解決策ではありません。私は@Larry Ostermanに 'ContentType'の設定に問題があったとコメントしました。私はそれを行う方法を見つけました - 'content.Headers.ContentType = new MediaTypeHeaderValue( "application/x-www-form-urlencoded");あなたが答えに近づいているので、私は答えとして投稿しました) – RredCat

関連する問題