如何在c#中有效地检查来自URL的401响应?
本文关键字:URL 响应 检查 有效地 | 更新日期: 2023-09-27 18:02:40
我想创建一个方法来确定一个特定的URL是否匿名可用。我这样做是为了从自定义搜索页面中剔除无法访问的结果。我能想到的最好的是
public bool IsWebAddressAccessible(string Url)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
try
{
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
}
catch (System.Net.WebException)
{
return false;
}
return true;
}
然而,由于以下两个原因,这并不理想。首先,据我所知,以这种方式依赖逻辑异常是不高效的。其次,在页面可访问的情况下,它似乎检索整个页面,这很耗时。问题是:
- 有没有办法做到这一点,而不依赖于异常?
- 是否有一种方法可以加速这一点,这样我就可以看到是否响应返回为401或不等待检索整个页面?
-
这是HttpWebRequest设计中一个令人烦恼的例外。我实际上在我的一个项目中有几个扩展方法(一个使许多请求预计将返回304未修改):
[DebuggerNonUserCode] public static HttpWebResponse GetHttpResponse(this HttpWebRequest request) { // We know the response will be a HttpWebResponse because the request is a HttpWebRequest return (HttpWebResponse)request.GetResponse(); } [DebuggerNonUserCode] public static HttpWebResponse GetHttpResponseAvoidVexingExceptions(this HttpWebRequest request) { try { return GetHttpResponse(request); } catch (WebException ex) { HttpWebResponse response = (HttpWebResponse)ex.Response; switch (response.StatusCode) { case HttpStatusCode.NotModified: return response; default: // We don't catch other exceptions throw; } } }
- 就像Mark说的,使用
HEAD
方法只返回响应头。