2

我的方法中有以下代码:

// 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 对象的 StatusCodeFtpStatusCode.ActionNotTakenFileUnavailable为 550 时会发生此异常?

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

4

2 回答 2

0

这实际上是按设计运行的。您需要捕获该特定异常,然后询问响应。根据MSDN 文档

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

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

try
{
    return (FtpWebResponse)request.GetResponse();
}
catch (WebException we)
{
    // interrogate the WebException for the response data you're looking for 
}
于 2013-11-20T23:28:48.810 回答
0

因为在发出 Http 请求后得到错误代码与语言的 Exception 语义完全匹配。您实际上没有有意义的响应来返回,并且由于它是“异常”情况,因此将 Web 错误转换为 WebException 是有意义的。

于 2013-11-20T23:46:41.087 回答