7

假设我创建并执行了一个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”,那么这样的测试也会返回 true 。

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

4

3 回答 3

14

WebException公开一个StatusCode您可以检查的属性。

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

(int)((HttpWebResponse)ex.Response).StatusCode
于 2009-03-23T18:51:18.330 回答
3

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

catch (WebException ex) {
    if (ex.Status == WebExceptionStatus.ProtocolError &&
        ((FtpWebResponse)ex.Response).StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable) {
        // Handle file not found here
    }
于 2009-03-23T21:46:52.197 回答
-1

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

于 2009-03-23T19:06:37.623 回答