2016-01-18 3 views
9

Creato wep api in asp.net 5. Sto cercando di restituire la risposta del file per la richiesta Post. Ma invece di file di risposta sembra `Come restituire il file da ASP.net 5 web api

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

Codice:

public HttpResponseMessage Post([FromBody]DocumentViewModel vm) 
    { 
     try 
     { 
      if (ModelState.IsValid) 
      { 

       var Document = _repository.GetDocumentByGuid(vm.DocumentGuid, User.Identity.Name); 
       var Params = Helper.ClientInputToRealValues(vm.Parameters, Document.DataFields); 
       var file = Helper.GeneratePdf(Helper.InsertValues(Params, Document.Content));     

       var result = new HttpResponseMessage(HttpStatusCode.OK) 
       { 
        Content = new ByteArrayContent(System.IO.File.ReadAllBytes(file)) 
       }; 
       result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment") 
       { 
        FileName = "test.pdf" 
       }; 
       result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf"); 
       return result; 

      } 

     } 
     catch (Exception ex) 
     { 
      Response.StatusCode = (int)HttpStatusCode.BadRequest; 
      return null; 
     } 
     Response.StatusCode = (int)HttpStatusCode.BadRequest; 
     return null; 

    } 

Come posso restituire il file vero e proprio come la risposta, invece di JSON Sto usando Postman come client di prova?.

+0

Forse questo può aiutare: http://stackoverflow.com/questions/9541351/returning-binary-file-from-controller-in-asp-net-web-api – jpgrassi

+0

nop, restituisce ancora JSON come risultato: –

risposta

5

utilizzato IActionResult invece di HttpResponseMessage. E restituito FileStreamResult, e farlo funzionare.

Trovato un nuovo problema, il file non è quello che apro con lo streaming dal server. Ma creerà una nuova domanda per questo.

continua: Return file from ASP.NET 5 Web API

Grazie

0

L'impostazione di HttpContext.Response.ContentType = "application/pdf" è di aiuto?

Questo dovrebbe soddisfare le vostre esigenze:

public FileResult TestDownload() 
    { 
     HttpContext.Response.ContentType = "application/pdf"; 
     FileContentResult result = new FileContentResult(System.IO.File.ReadAllBytes("YOUR PATH TO PDF"), "application/pdf") 
     { 
      FileDownloadName = "test.pdf" 
     }; 

     return result;         
    } 
+0

no, non aiuta. Il risultato rimane lo stesso. –

+0

Dispone di "intestazioni": [], 'non è stato popolato nulla? Come posso vedere dal tuo post iniziale che è vuoto. Che build di asp.net 5 stai usando, ed è completo .net o coreclr? –

+0

No, rimane vuoto. –

1

Prova questo!

[HttpGet] 
    public HttpResponseMessage Get() 
    { 
     var fs = new FileStream(myfileInfo.FullName, FileMode.Open, FileAccess.Read, 
           FileShare.Read, 32768, true); 
      var response = this.Request.CreateResponse(); 
      response.Content = new StreamContent(fs); 
      response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment"); 
      response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); 
      response.Content.Headers.ContentLength = fs.Length; 
      fs.Dispose(); 
      return response; 
    }