我的方法中有以下代码:
// 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)时,为什么会发生此异常?
我找到有关如何处理异常并从中获取状态代码和描述的信息。但我想知道为什么首先抛出异常,而不是设置响应对象的状态代码,让编码器决定是否保证例外。
答案 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是有意义的。