WebRequest与FileWebRequest

时间:2018-06-09 11:44:27

标签: c# webrequest

我正在阅读Microsoft考试70-483“用C#编程”的示例考题。

有一个问题我不明白,也无法在互联网上找到有关该主题的任何内容。

问题是:

  

您正在实现一个名为ProcessFile的方法,该方法从Web服务器和FTP服务器检索数据文件。 ProcessFile()方法具有以下方法签名:   
Public void ProcessFile(Guid dataField,string dataFileUri)   
每次调用ProcessFile()方法时,它都必须检索唯一的数据文件,然后将数据文件保存到磁盘。   
你需要完成的实施   ProcessFile()方法。你应该使用哪个代码段?

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());
}

-OR -

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”不是。
请记住,我在做的问题在过去经常出错,所以也许这也不正确?

1 个答案:

答案 0 :(得分:2)

几个小时前,我也遇到了这个问题。早期我还没有解决这个问题,但是通过在Google中搜索信息,我得出以下结论:

  • 有问题的主要关键词是来自Web服务器和FTP服务器

    这意味着 dataFileUri 可能类似于http://mywebserverftp://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将为

    类似的行为是当您尝试使用http://mywebserver时:request2,request3将为 null

  • 使用WebRequest时,传输协议会自动检测请求的类型

    因此您无需考虑文件是否存储在Web服务器/文件服务器/ ftp服务器上