Rückkehr CSV aus .NET-Core-controller

Ich habe Probleme mit einem .NET-Core-API-Endpunkt-Controller beheben, um eine CSV-download. Ich bin mit dem folgenden code die ich zog aus .NET 4.5-controller:

[HttpGet]
[Route("{id:int}")]
public async Task<HttpResponseMessage> Get(int id)
{
    string csv = await reportManager.GetReport(CustomerId, id);
    var response = new HttpResponseMessage(HttpStatusCode.OK);
    response.Content = new StringContent(csv);
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/csv");
    response.Content.Headers.ContentDisposition = 
        new ContentDispositionHeaderValue("attachment") { FileName = "report.csv" };
    return response;
}

Wenn ich auf diesen Endpunkt aus meinem Winkel 4 app, bekomme ich die folgende Antwort in den browser geschrieben:

{
    "version": {
        "major": 1,
        "minor": 1,
        "build": -1,
        "revision": -1,
        "majorRevision": -1,
        "minorRevision": -1
    },
    "content": {
        "headers": [
            {
                "key": "Content-Type",
                "value": [
                    "text/csv"
                ]
            },
            {
                "key": "Content-Disposition",
                "value": [
                    "attachment; filename=11.csv"
                ]
            }
        ]
    },
    "statusCode": 200,
    "reasonPhrase": "OK",
    "headers": [ ],
    "requestMessage": null,
    "isSuccessStatusCode": true
}

Meine Erwartung ist, dass, wenn ich auf den Endpunkt, wird der Benutzer aufgefordert, um den download der CSV.

Fand ich diese post auf, wie Sie "export" wird eine CSV in .NET Core. Das problem ist, dass ich beim abrufen der CSV-im-Speicher von ihm die Quelle (AWS S3 bucket) in der Erwägung, dass dieser code scheint zu funktionieren nur, wenn Sie haben eine IEnumerable<object>.

Frage ich mich, ob mein problem liegt entweder im request oder in der response-Header, wo es etwas zu verhindern das der browser abrufen einer CSV von meiner API. Hier ist, was ich sehe, in der browser-Konsole:

Rückkehr CSV aus .NET-Core-controller

docs.microsoft.com/en-us/aspnet/core/mvc/models/formatting
Ein weiterer Hinweis, in solchen Fällen oft besser outputformatters, die Lesen acceptencoding zum Beispiel, oder durch andere Regeln. Wenn Sie arbeiten an einem großen Projekt, müssen Sie wahrscheinlich zu verwenden, csv-export für die Anzahl der Methoden und, wenn Sie erstellen von generischen formatiert vermeiden Sie unnötige arbeiten in der Zukunft. Es kann ein layer in der middleware
Haben Sie etwas hinzuzufügen? Sie verlinken einen Artikel, auf den verwiesen wird, in einem link von meinem post ist nicht sehr hilfreich.
Es sieht aus, als ob Sie sind, Holen Sie den download über AJAX. Wenn Sie das tun, müssen Sie die responseType als arraybuffer und erstellen Sie ein blob aus der response-Daten an den Erfolg der Methode. Sie müssen auch behandeln die aktuellen download manuell durch erstellen einer Verknüpfung mit Daten und "Klick" es. Nichts davon geschieht automatisch für Sie.
In den Netzwerk-Verkehr screenshot, ich war zu schlagen, die URL direkt in den browser.

InformationsquelleAutor im1dermike | 2017-10-27

Schreibe einen Kommentar