捕获特定的WebException(550)

时间:2009-03-23 18:48:35

标签: c# .net exception exception-handling http-status-codes

假设我创建并执行System.Net.FtpWebRequest

我可以使用catch (WebException ex) {}来捕获此请求引发的任何与Web相关的异常。但是如果我有一些逻辑,我只想在(550) file not found引发异常时执行它?

最好的方法是什么?我可以复制异常消息并测试相等性:

const string fileNotFoundExceptionMessage =
    "The remote server returned an error: (550) File unavailable (e.g., file not found, no access).";
if (ex.Message == fileNotFoundExceptionMessage) {

但从理论上讲,这条消息似乎可以改变。

或者,我可以测试异常消息是否包含“550”。如果消息被更改,这种方法可能更有效(它可能在文本中的某处仍然包含“550”)。但是,如果其他WebException的文本碰巧包含“550”,那么这样的测试当然也会返回。

似乎没有一种方法可以只访问异常的。这可能吗?

3 个答案:

答案 0 :(得分:14)

WebException会公开您可以查看的StatusCode属性。

如果您需要实际的HTTP响应代码,可以执行以下操作:

(int)((HttpWebResponse)ex.Response).StatusCode

答案 1 :(得分:3)

作为参考,这是我最终使用的实际代码:

catch (WebException ex) {
    if (ex.Status == WebExceptionStatus.ProtocolError &&
        ((FtpWebResponse)ex.Response).StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable) {
        // Handle file not found here
    }

答案 2 :(得分:-1)

声明一个WebException对象,将Catch块中的ex值转换为它。然后你可以检查StatusCode属性。