.NET抛出WebException而不是设置StatusCode

时间:2013-11-20 22:38:12

标签: c# ftp system.net.webexception

我的方法中有以下代码:

// make the FTP request
var request = (FtpWebRequest)WebRequest.Create(serverUri);
request.KeepAlive = true;
request.Method = WebRequestMethods.Ftp.MakeDirectory;
return (FtpWebResponse)request.GetResponse();

serverUri有效,如果服务器上已不存在该目录,则此方法有效。但是,如果目录已存在,则会发生System.Net.WebException : The remote server returned an error: (550) File unavailable (e.g., file not found, no access)

当我调用request.GetResponse()而不是将FtpWebResponse对象的StatusCode设置为FtpStatusCode.ActionNotTakenFileUnavailable(550)时,为什么会发生此异常?

我找到有关如何处理异常并从中获取状态代码和描述的信息。但我想知道为什么首先抛出异常,而不是设置响应对象的状态代码,让编码器决定是否保证例外。

2 个答案:

答案 0 :(得分:0)

这实际上是按照设计行事。您需要捕获该特定异常,然后询问响应。根据{{​​3}}:

  

如果抛出WebException,请使用异常的Response和Status属性来确定服务器的响应。

因此,代码可能如下所示:

try
{
    return (FtpWebResponse)request.GetResponse();
}
catch (WebException we)
{
    // interrogate the WebException for the response data you're looking for 
}

答案 1 :(得分:0)

因为在发出Http请求后获取错误代码与该语言的Exception语义完全匹配。实际上你没有回复的有意义的响应,因为它是一个“例外”的情况,将Web错误转换为WebException是有意义的。