How to return file from ASP.net 5 web api

匿名 (未验证) 提交于 2019-12-03 02:14:01

问题:

Created wep api in asp.net 5. I am tring to return file response for Post request. But instead of file the response looks like `

{   "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 }` 

Code:

    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;      } 

How can I return the real file as the response instead of JSON ?I am using Postman as test client.

回答1:

used IActionResult instead of HttpResponseMessage. And returned FileStreamResult, and got it working.

Got a new problem, the file is not the one I open with the stream from server. But will create a new question for that.

Continues : Return file from ASP.NET 5 Web API

Thanks



回答2:

Try this!

    [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;     } 


回答3:

Does setting HttpContext.Response.ContentType = "application/pdf" help at all?

This should fit your needs:

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;                                     } 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!