显示csv的可下载链接

时间:2012-11-06 21:01:32

标签: c# asp.net asp.net-mvc webclient

我正在尝试使用以下代码在可下载的.csv文件中显示数据流:

WebClient wc = new WebClient();
                    byte[] csvBytes = wc.DownloadData(url);
                    return File(csvBytes, "text/csv", "Test.csv");

网址以这种格式返回数据:

    “PAUL”,“SMITH”,“A& P CONSTRUCTION”,“211 N JACKSON ST”,“纽约”,“纽约”,“98055”     “JEROME”,“HALSEY”,“A A A A LOCATING INC”,“1906 SOUTHVIEW DR”,“PAPILLION”,“NE”,“68046”     “MIKE”,“GIBILISCO”,“ABSOLUTE SECURITY INC”,“944 S JEFFERSON ST”,“PAPILLION”,“NE”,“84102”

上面的效果很好,我得到了一个可下载的链接...但是当我打开.csv文件时 - 我只记录了一行记录:

\"PAUL\"    \"SMITH\"   \"A & P CONSTRUCTION\"  \"211 N JACKSON ST\"    \"PAPILLION\"   \"NE\"  \"68046\"...

我应该如何修改上面的代码,以便以正确的格式获取值(不使用“\”和右列)?

2 个答案:

答案 0 :(得分:1)

原因是您在使用WebClient时获得了不同的数据。看起来服务器在为您构建CSV时会查看HTTP标头。

因此,您需要尽可能多地模拟您的浏览器(只要您在浏览器中获得正确的CSV),以使CSV服务器认为您是浏览器。要做到这一点,您需要查看HTTP标头,当您访问CSV URL时,浏览器会发送该标头(您可以使用Fiddler或浏览器内置的任何开发工具)。而你需要像这样结束smth:

wc.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
wc.Headers.Add("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.3");
wc.Headers.Add("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");

逐个添加标题,只需确保与浏览器发送的标题完全相同(并忽略“cookie”,“host”等标题)。

答案 1 :(得分:0)

尝试将Mime类型更改为“application / csv”。

CSV的Mime类型还包括:text /逗号分隔值,text / csv,application / csv,application / excel,application / vnd.ms-excel,application / vnd.msexcel,text / anytext