2016-05-08 2 views
0

のHttpClient https://msdn.microsoft.com/en-us/library/system.net.httpstatuscode(v=vs.118).aspxC#のHttpClient 303 SeeOtherバグ

に記載されるように自動的に303(SeeOther)を処理SeeOther自動的URIにクライアントをリダイレクトPOSTの結果として Locationヘッダで指定されました。 Locationヘッダーで指定された リソースへの要求は、GETで行われます。

同じ動作がGET要求で発生するようですが、私のAuthorizationヘッダーが欠落しているかのように呼び出しが失敗します。

私は303を傍受し、手でLocationヘッダからのURIを呼び出すことにより、エラーを修正することができる午前

public void SetOauthToken(String key, String token) 
    { 
     client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(key, token); 
    } 

を使用してヘッダを設定します。例えば

私は

public async Task<T> GetXML<T>(String url) 
    { 
     using (HttpResponseMessage response = await client.GetAsync(url)) 
     { 
      if (response.StatusCode == HttpStatusCode.SeeOther) 
      { 
       return await GetXML<T>(response.Headers.Location.ToString()); 
      } 
      else 
      { 
       string result = await response.Content.ReadAsStringAsync(); 
       var serializer = new XmlSerializer(typeof(T)); 

       return (T)serializer.Deserialize(new StringReader(result)); 
      } 
     } 
    } 

public async Task<T> GetXML<T>(String url) 
    { 
     using (HttpResponseMessage response = await client.GetAsync(url)) 
     { 

      string result = await response.Content.ReadAsStringAsync(); 
      var serializer = new XmlSerializer(typeof(T)); 

      return (T)serializer.Deserialize(new StringReader(result)); 

     } 
    } 

を変更し、それがバグを修正。

リダイレクトリクエストを調べるときは、すべて問題がないようです。リダイレクトコールはPostmanから機能します。

なぜこのようなことが起こっているのですか?

答えて

-1

最初に、httpステータスの応答を信じているとは限りません。ウェブサイトでは値を変更して、ハッカーがサーバーにアクセスするのをより困難にすることがよくあります。 Http接続が行われると、httpヘッダーを使用してクライアントとサーバーの間でネゴシエーションが行われます。交渉は、転送のための共通モードを取得しようとします。たとえば、サーバーは英語、フランス語、ドイツ語で動作するように設計されています。クライアントはヘッダに英語を含むため、クライアントは英語のWebページに接続します。ですから、AuthenticationHeaderValueを省略することはバグではなく、必要なコード行です。 Internet ExplorerのWebページはNet Http Clientよりも堅牢で、より多くのデフォルトヘッダーを送信します。 wiresharkやfiddlerのようなスニファを使って、IEとあなたのアプリケーションを使ってヘッダーを比較した場合、その違いが分かります。

+0

私はあなたの言っていることに同意しますが、あなたの応答は私の質問とは関係がありません。 –

+0

httpヘッダーを変更して問題を解決しましたか?それは私が言ったことではない? – jdweng

+0

いいえ、303の自動ハンドルを無効にして解決しました。ヘッダーは同じです。 –