2017-02-27 4 views
0

In meinem asp.net Webapi-Projekt muss ich Zeichenfolge JSON-Daten als Datei zurückgeben. Was auch wichtig ist Ich möchte Statuscode der Antwort auf 200 (erfolgreich) festgelegt haben. Ich habe viele Beispiele gefunden, wo Leute MemoryStream und FileStreamResult verwenden, um die richtige Datei vom Server zu bekommen, aber es funktioniert nicht für mich.ASP.NET Core WebApi - Download-Datei verursacht Fehlermeldung

Leider bekomme ich immer eine Nachricht im Browser, die "Unerwarteter Fehler" ist, obwohl der Server-Code ohne Ausnahmen funktioniert. Ich habe Details der Anfrage in einem Browser überprüft und es hat den Statuscode "Ungültige Anfrage" (400).

Mein Code:

[HttpGet()] 
public async Task<IActionResult> Download() 
{ 
    string jsonData = "example data"; 
    byte[] byteArray = Encoding.UTF8.GetBytes(jsonData); 
    var stream = new MemoryStream(byteArray); 

    var result = new FileStreamResult(stream, new MediaTypeHeaderValue("text/json")) 
         { 
          FileDownloadName = "testFile.json" 
         }; 
    return result; 
} 
+0

Es scheint ein bisschen wie Sie suchen [etwas in dieser Frage beantwortet] (http://stackoverflow.com/questions/41383338/how-to -download-a-zipfile-von-a-dotnet-core-webapi/41395761 # 41395761). Haben Sie versucht, 'require Created (result);'? –

+0

Es funktioniert nicht für mich :(. Jetzt bekomme ich Nachricht: ERR_INVALID_RESPONSE. Bitte verwenden Sie Ihr Beispiel als Stream basierend auf String-Variable, anstatt es aus tatsächlichen vorhandenen Datei auf dem Server. – Ellbar

Antwort

0
[HttpGet()] 
    public async Task<HttpResponseMessage> Download() 
    { 
     string jsonData = "example data"; 
     byte[] byteArray = Encoding.UTF8.GetBytes(jsonData); 

var result = new HttpResponseMessage(HttpStatusCode.OK) {Content = new ByteArrayContent(byteArray)}; 
      result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); 
      result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue(Inline) { FileName = "testFile.json" }; 
      return result; 

    } 
+0

Ich kann Ihre Lösung wegen 2 nicht kompilieren Die Fehler: (1): "FileStreamResult" enthält keine Definition für "Content" und keine Erweiterung Methode "Content" akzeptiert ein erstes Argument vom Typ "FileStreamResult" gefunden werden konnte (2): Kann nicht konvertieren Typ System konvertieren. Net.Http.StringContent to System.Net.Http.HttpResponseMessage – Ellbar

+0

Sorry, versuchen Sie dieses. – agfc

+0

Jetzt kompiliert der Code, aber das Ergebnis wird im Browser als JSON zurückgegeben, nicht als eine Datei, die heruntergeladen wird. – Ellbar

Verwandte Themen