そのため、数週間後、この問題に戻る時間がありました。結局のところ、ASP.NETとはまったく関係がなく、WebClientのせいです。WebClientはリダイレクトに従う前に資格情報をクリアするため、この場合、元の要求は成功しましたが、ターゲットにも認証が必要なため、WebClientがリダイレクト先のページにアクセスしようとしたときにエラーが発生しました。
残念ながら、プロパティを介してこの動作を切り替えることはできません。したがって、私のソリューションは次のようになります。
//Credentials necessary for the request(s)
var cred = new NetworkCredential(username, password);
//Create initial request
var request = (HttpWebRequest)WebRequest.Create(url);
request.AllowAutoRedirect = false;
request.Credentials = cred;
//Get response to first request
var response = (HttpWebResponse)request.GetResponse();
//Follow redirects
while (response.StatusCode == HttpStatusCode.Redirect && maxRedirects > 0)
{
//Build new URI for redirect target
var uri = response.ResponseUri;
url = String.Format("{0}://{1}:{2}{3}", uri.Scheme, uri.Host, uri.Port, response.GetResponseHeader("Location"));
//Create new request
request = (HttpWebRequest)WebRequest.Create(url);
request.AllowAutoRedirect = false;
request.Credentials = cred;
//Get new response
response = request.GetResponse() as HttpWebResponse;
maxRedirects--;
}
//Get the response's content
var sReader = new StreamReader(response.GetResponseStream());
string responseStr = sReader.ReadToEnd();
WebClientを使用する代わりに、HttpWebRequestとHttpWebResponseを使用して、手動でリダイレクトに従います。リクエストを行う前に、リクエストを完了するために必要な資格情報を設定しました