0

次のコードを使用して、ダウンロード可能な .csv ファイルにデータのストリームを表示しようとしています。

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

URL は次の形式でデータを返します。

「PAUL」、「SMITH」、「A & P CONSTRUCTION」、「211 N JACKSON ST」、「New York」、「NY」、「98055」、「JEROME」、「HALSEY」、「AAA LOCATING INC」、「1906 SOUTHVIEW DR","PAPILLION","NE","68046" "MIKE","GIBILISCO","ABSOLUTE SECURITY INC","944 S JEFFERSON ST","PAPILLION","NE","84102"

上記はうまく機能し、ダウンロード可能なリンクを取得します...しかし、.csv ファイルを開くと、レコードが 1 行だけ表示されます。

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

上記のコードをどのように変更して、値を正しい形式 (「\」なしで右側の列の下) で取得する必要がありますか?

4

2 に答える 2

1

その理由は、を使用しているときに異なるデータを取得しているためですWebClient。サーバーが CSV を作成するときに HTTP ヘッダーを参照しているようです。

そのため、CSV サーバーに自分がブラウザーであると認識させるために、ブラウザーをできる限り (ブラウザーで正しい CSV を取得している限り) エミュレートする必要があります。これを行うには、CSV URL にアクセスしたときにブラウザーが送信する HTTP ヘッダーを表示する必要があります (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;)");

ヘッダーを 1 つずつ追加します。ただし、ブラウザーが送信するヘッダーと完全に同じであることを確認してください (「cookie」、「host」などのヘッダーは無視してください)。

于 2012-11-06T22:56:23.920 に答える
0

Mime タイプを「application/csv」に変更してみてください。

CSV の MIME タイプも次のとおりです: text/comma-separated-values、text/csv、application/csv、application/excel、application/vnd.ms-excel、application/vnd.msexcel、text/anytext

于 2012-11-06T22:00:31.487 に答える