C# 使用C下载URL内容配置excel文件#

C# 使用C下载URL内容配置excel文件#,c#,httpwebrequest,content-disposition,C#,Httpwebrequest,Content Disposition,我需要使用C#下载一个附加到URL的文件,我已经编写了以下代码: var uri = new Uri("http://members.tsetmc.com/tsev2/excel/MarketWatchPlus.aspx?d=0"); var request = WebRequest.CreateHttp(uri); var response = request.GetResponse(); string dispositi

我需要使用C#下载一个附加到URL的文件,我已经编写了以下代码:

var uri = new Uri("http://members.tsetmc.com/tsev2/excel/MarketWatchPlus.aspx?d=0");
            var request = WebRequest.CreateHttp(uri);
            var response = request.GetResponse();
            string disposition = response.Headers["Content-Disposition"];

            string filename = disposition.Substring(disposition.IndexOf("filename=") + 9).Replace("\"", "");

            using (var fs = new FileStream(filename.Replace("/", "-"), FileMode.Create, FileAccess.Write, FileShare.None))
            {
                response.GetResponseStream().CopyTo(fs);
            }

但是保存在路径中的excel文件似乎已损坏

我在尝试调用您的URL时被禁止返回。在我的例子中,我使用了一个不同的URL,它工作得很好

var request = WebRequest.CreateHttp("http://spreadsheetpage.com/downloads/xl/king-james-bible.xlsm");
        var response = request.GetResponse();

        using (var fs = new FileStream("king-james-bible.xlsm", FileMode.Create, FileAccess.Write, FileShare.None))
        {
            using (var stream = response.GetResponseStream())
            {
                stream.CopyTo(fs);
            }
        }
您检索的文件本身是否已损坏

根据新信息更新

好的,链接现在对我有效。您的问题是Excel文件是使用gzip编码发送的。下面的代码示例适用于您的URL

var request = WebRequest.CreateHttp("http://members.tsetmc.com/tsev2/excel/MarketWatchPlus.aspx?d=0");//"http://spreadsheetpage.com/downloads/xl/king-james-bible.xlsm");
        var response = request.GetResponse();
        string disposition = response.Headers["Content-Disposition"];

        string filename = disposition.Substring(disposition.IndexOf("filename=") + 9).Replace("\"", "");

        using (var fs = new FileStream(filename.Replace("/", "-"), FileMode.Create, FileAccess.Write, FileShare.None))
        {
            using (var stream = response.GetResponseStream())
            {
                using (GZipStream zipStream = new GZipStream(stream, CompressionMode.Decompress))
                {
                    byte[] tempBytes = new byte[4096];
                    int i;
                    while ((i = zipStream.Read(tempBytes, 0, tempBytes.Length)) != 0)
                    {
                        fs.Write(tempBytes, 0, i);
                    }
                }
            }
        }

我使用了这篇文章中的信息进行gzip解码:

路径没有通向任何地方,我建议使用我更新的URL。请再看一看,我使用的URL不是直接指向excel文件的。它有一个附件,我从contentdispositionheader获取它的名称info@aminmohammadi我已经根据你的回答更新了答案input@PaulHieltjes我们是否必须在最后调用
response.Close()