C# 网络客户端状态码
我正在使用WebClient从有时不可用的页面获取一些信息[302已暂时移动]。所以我想通过编程来检测页面是否存在 我试图用以下代码覆盖WebClient WebResponse,以仅在页面状态为OK但不起作用时返回页面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
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]时才返回该页面。或者以任何其他方式向我发出重定向