3

我有一个应用程序,它有时必须向服务器发出一些请求,以查看这些请求是否被正确阻止。换句话说,预计服务器答案是403禁止。如何避免WebException for 403 Forbidden响应?

用一块这样的代码:

HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(protectedPage); 
httpRequest.Method = WebRequestMethods.Http.Head; 
WebResponse response = HttpRequest.GetResponse(); 

一个WebException被套上的最后一行。

当分析代码时,try/catch块中的这个异常具有我想要避免的性能影响。

有没有办法检查服务器响应,期待403,而不必捕捉异常(但避免直接使用套接字)?

+0

我没有看到捕捉该异常会如何影响性能。我的意思是,与接收网页需要多长时间相比,这无需任何费用。 – Will 2010-12-05 04:38:26

回答

3

不幸的是,这是一个vexing exception在框架中,并且没有办法避免它(同时仍然使用HttpWebRequest类)。但是,正如High指出的那样,这种异常处理将需要几十秒的时间,而Web请求本身需要几毫秒(最好),所以不要担心。

WebException对象具有包含响应的Response属性;当您处理异常时,处理该对象(以避免连接泄漏)很重要。

+0

+1促进Eric Lippert的异常分类 – Tergiver 2010-12-05 14:11:38

+0

@Tergiver,我认为这是一种情况,一个用例的令人烦恼的异常是另一个用例的外生异常。如果你没有权限读取文件,`File.Open`会抛出,`HttpWebRequest`在这里做类似的事情。 – 2014-08-28 21:55:04

2

概要分析中需要花费的时间可能不是异常捕捉部分,而是来自网站的实际响应。

WebException.Status属性将为您提供HTTP响应的状态码,您可以根据该响应进行进一步处理。