Asp.net-Web-Api
如何從 ASP.net 5 web api 返回文件
在 asp.net 5 中創建了 wep api。我正在嘗試返回 Post 請求的文件響應。但不是文件,而是響應看起來像`
{ "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 }`程式碼:
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; }如何將真實文件作為響應而不是 JSON 返回?我使用 Postman 作為測試客戶端。
使用 IActionResult 而不是 HttpResponseMessage。並返回 FileStreamResult,並讓它工作。
遇到了一個新問題,該文件不是我使用來自伺服器的流打開的文件。但會為此提出一個新問題。
謝謝
這是“低級”HTTP 方法,應該適用於 ASP.NET WebAPI 或 ASP.NET MVC。
[HttpGet] public HttpResponseMessage Download() { var fs = new FileStream(myfileInfo.FullName, FileMode.Open, FileAccess.Read, FileShare.Read, 32768, true); var response = new HttpResponseMessage { Content = new StreamContent(fs); } response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment"); response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); return response; }