我正在阅读 Microsoft 考试 70-483“C# 编程”的示例试题。
有一个问题的答案我不明白,也无法在 Internet 上找到有关该主题的任何信息。
问题是:
You are implementing a method named ProcessFile that retrieves data files from web servers and FTP servers. The ProcessFile() method has the following method signature:
Public void ProcessFile(Guid dataField, string dataFileUri)
Each time the ProcessFile() method is called, it must retrieve a unique data file and then save the data file to disk.
You need to complete the implementation of the ProcessFile() method. Which code segment should you use?
FileWebRequest request = FileWebRequest.Create(dataFileUri) as FileWebRequest;
using (FileWebResponse response = request.GetResponse() as FileWebResponse)
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
using (StreamWriter writer = new StreamWriter(dataFieldId + ".dat"))
{
writer.Write(reader.ReadToEnd());
}
-或-
WebRequest request = WebRequest.Create(dataFileUri);
using (WebResponse response = request.GetResponse())
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
using (StreamWriter writer = new StreamWriter(dataFieldId + ".dat"))
{
writer.Write(reader.ReadToEnd());
}
根据出题人的说法,后一个片段,使用“WebRequest”是正确的。但我不明白为什么“FileWebRequest”不是。
请记住我做的问题在过去有很多错误,所以也许这也不正确?
最佳答案
几个小时前我也遇到了这个问题。早期我没有使用过这个,但是通过在 Google 中搜索信息,我得出以下结论:
问题的主要词是来自网络服务器和FTP服务器,
这意味着 dataFileUri 可能类似于 http://mywebserver或 ftp://myftpserver
当您尝试从 ftp 服务器获取文件时,例如:
//from answer var request1 = WebRequest.Create("ftp://myftpserver"); //from answer var request2 = FileWebRequest.Create("ftp://myftpserver") as FileWebRequest; var request3 = WebRequest.Create("ftp://myftpserver") as FtpWebRequest;
request1、request3 将具有类型为 SystemNet.FtpWebRequest 的请求值。 request2 将为 null。
当您尝试使用 http://mywebserver 时会出现类似的行为。 : request2, request3 将为null。
当您使用 WebRequest 时,传输协议(protocol)会自动检测请求的类型
所以你不需要考虑文件是否存储在web服务器/文件服务器/ftp服务器上
关于c# - WebRequest 与 FileWebRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50773925/