1

WebClient を使用して、時々利用できないページから情報を取得しています [302 Moved Temporarily]。だから私はページが存在するかどうかを検出するようにプログラムしたい

次のコードで WebClient WebResponse をオーバーライドして、ステータスが OK の場合にのみページを返そうとしましたが、機能しませんでした。

protected override WebResponse GetWebResponse(WebRequest request)
{
    var response = base.GetWebResponse(request);

    if (response is HttpWebResponse)
        return (response as HttpWebResponse).StatusCode == HttpStatusCode.OK ? response : null;
    return null;
}

オーバーライドされたクラスを使用してページを取得すると (ページが利用できない場合)、リダイレクトされ、null が返されませんでした

コードを取得

private async Task<string> Get(string uri)
{
    return await Handler.DownloadStringTaskAsync(new Uri(uri));
}

[実現したいこと] : Web クライアントがページを取得しようとしたが、見つからなかったため、別のページにリダイレクトされました。

4

2 に答える 2

1

WebClientデフォルトで自動的にリダイレクトに従います (最大数まで)。

オーバーライドGetWebRequestして返された を変更し、HttpWebRequestそのAllowAutoRedirectプロパティを false に設定すると、302 が直接返されると思いますが、おそらく例外を介して...

于 2012-11-19T23:17:13.393 に答える
0

これはステータスを教えてくれませんが、リダイレクトされたという事実から推測できます。

if(reponse.ResponseUri != request.RequestUri) {
   // if you really want to know the status
   // set AllowAutoRedirect = false;
   // and send another request in here.
}   
于 2012-11-19T23:43:52.520 に答える