C# 网络客户端状态码

C# 网络客户端状态码,c#,webclient,http-status-code-302,C#,Webclient,Http Status Code 302,我正在使用WebClient从有时不可用的页面获取一些信息[302已暂时移动]。所以我想通过编程来检测页面是否存在 我试图用以下代码覆盖WebClient WebResponse,以仅在页面状态为OK但不起作用时返回页面 protected override WebResponse GetWebResponse(WebRequest request) { var response = base.GetWebResponse(request); if (response is H

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

我试图用以下代码覆盖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));
}
私有异步任务获取(字符串uri)
{
return wait Handler.downloadstringtasksync(新Uri(Uri));
}

[我想要实现的]:我希望web客户端尝试获取该页面,但未找到该页面,因此已将其重定向到另一个页面。

WebClient
默认情况下将自动执行重定向操作(最大数目)


如果您重写
GetWebRequest
来修改返回的
HttpWebRequest
,将其属性设置为false,那么我相信它将直接返回302-尽管可能通过异常…

WebClient
默认情况下将自动执行重定向(最大数量)


如果您重写
GetWebRequest
以修改返回的
HttpWebRequest
,将其属性设置为false,那么我相信它将直接返回302-尽管可能通过异常…

这不会告诉您状态,但可以通过重定向的事实推断

if(reponse.ResponseUri != request.RequestUri) {
   // if you really want to know the status
   // set AllowAutoRedirect = false;
   // and send another request in here.
}   

这不会告诉您状态,但可以通过您被重定向的事实来推断

if(reponse.ResponseUri != request.RequestUri) {
   // if you really want to know the status
   // set AllowAutoRedirect = false;
   // and send another request in here.
}   

有没有办法在不将自动重定向属性设置为false的情况下执行此操作?@RuneS:据我所知,没有-你不想遵循重定向,是吗?不,我想正常地跟踪重定向,但同时检测是否发生了302代码。@RuneS:但在问题描述中,如果有重定向,听起来像是想返回
null
。你需要修改你的问题,让它更清楚你想要达到的目标。是的,这就是我想要做的。仅当页面的状态代码==200[OK]时才返回该页面。或者以其他方式向我发送重定向,有没有办法不将自动重定向属性设置为false来执行此操作?@RuneS:据我所知,没有-你不想跟踪重定向,是吗?不,我想正常地跟踪重定向,但同时检测是否发生了302代码。@RuneS:但在问题描述中,如果有重定向,听起来像是想返回
null
。你需要修改你的问题,让它更清楚你想要达到的目标。是的,这就是我想要做的。仅当页面的状态代码==200[OK]时才返回该页面。或者以任何其他方式向我发出重定向