Ich arbeite daran, wie CSV-Datei von ASP.NET Web API von jQuery Ajax Anruf herunterladen. Die CSV-Datei wird basierend auf dem benutzerdefinierten CsvFormatter dynamisch vom Web-API-Server generiert.Wie CSV-Datei von ASP.NET Web API mit jQuery Ajax Anruf herunterladen
Ajax von jQuery:
$.ajax({
type: "GET",
headers: {
Accept: "text/csv; charset=utf-8",
},
url: "/api/employees",
success: function (data) {
}
});
Auf dem Server wird die EmployeeCsvFormatter
ähnlich mit folgenden Artikeln implementiert, abgeleitet von BufferedMediaTypeFormatter
:
http://www.asp.net/web-api/overview/formats-and-model-binding/media-formatters
public class EmployeeCsvFormatter : BufferedMediaTypeFormatter
{
public EmployeeCsvFormatter()
{
SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/csv"));
}
...
}
I auch Override-Verfahren hinzugefügt, um zeigen an, dass ich wie normale Download-Datei herunterladen möchte (kann die Download-Datei im Download sehen tab):
public override void SetDefaultContentHeaders(Type type,
HttpContentHeaders headers, MediaTypeHeaderValue mediaType)
{
base.SetDefaultContentHeaders(type, headers, mediaType);
headers.Add("Content-Disposition", "attachment; filename=yourname.csv");
headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
}
Aber es allerdings nicht funktioniert, ist die Download-Datei nicht in der Statusleiste oder in Download-Tab in Chrome zeigt, auch von Fiddler, ich kann es die Antwort sehe richtig scheint:
HTTP/1.1 200 OK
Server: ASP.NET Development Server/11.0.0.0
Date: Mon, 11 Mar 2013 08:19:35 GMT
X-AspNet-Version: 4.0.30319
Content-Disposition: attachment; filename=yourname.csv
Cache-Control: no-cache
Pragma: no-cache
Expires: -1
Content-Type: application/octet-stream
Content-Length: 26
Connection: Close
1,Cuong,123
1,Trung,123
Meine Methode von ApiController:
public EmployeeDto[] Get()
{
var result = new[]
{
new EmployeeDto() {Id = 1, Name = "Cuong", Address = "123"},
new EmployeeDto() {Id = 1, Name = "Trung", Address = "123"},
};
return result;
}
Es muss irgendwo falsch sein, die ich aus nicht herausgefunden haben. Wie kann ich es funktionieren lassen, indem ich CSV-Datei wie üblich herunterlade?
kann nicht mit AJAX in Datei herunterladen. Umleiten Sie einfach Benutzer zu url 'window.location = url', wenn der Server den Download erzwingt, wird die aktuelle Seite nicht verlassen – charlietfl
@charlietfl: Wie kann ich Accept Header auf diese Weise setzen? –
Was erwarten Sie von 'accept header'? Kann Benutzer nicht zwingen, irgendetwas mit Download zu akzeptieren – charlietfl