の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から機能します。
なぜこのようなことが起こっているのですか?
私はあなたの言っていることに同意しますが、あなたの応答は私の質問とは関係がありません。 –
httpヘッダーを変更して問題を解決しましたか?それは私が言ったことではない? – jdweng
いいえ、303の自動ハンドルを無効にして解決しました。ヘッダーは同じです。 –