WebRequest 与 FileWebRequest

WebRequest vs FileWebRequest

我正在查看 Microsoft 考试 70-483 "Programming in C#" 的示例试题。

有一个问题我不明白,也没有在网上找到任何关于该主题的答案。

问题是:

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 or 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 时,传输协议会自动检测请求的类型

    所以你不需要考虑文件是否存储在网络server/fileserver/ftp服务器