1

我正在使用 WebClient 从有时不可用的页面获取一些信息 [302 临时移动]。所以我想编程来检测页面是否存在

我尝试使用以下代码覆盖 WebClient WebResponse 以仅在页面状态正常但不起作用时才返回页面。

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 回答