HttpResponseMessage 未返回 ByteArrayContent - ASP.NET 核心
HttpResponseMessage not returning ByteArrayContent - ASP.NET Core
我将文件存储在数据库中,我需要 Web API 到 return。数据库正确调用 returns 正确的字节数组(断点显示数组的长度约为 67000,这是正确的),但是当我调用 Web API 时,我从未得到该内容在响应中。我试过使用 MemoryStream 和 ByteArrayContent,但都没有给我应该得到的结果。我试过从 Postman 和我的 MVC 应用程序调用,但都不是 return 字节数组,只有 headers/success/etc.
的基本响应信息
public HttpResponseMessage GetFile(int id)
{
var fileToDownload = getFileFromDatabase(id);
if (fileToDownload == null)
{
return new HttpResponseMessage(HttpStatusCode.BadRequest);
}
var response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new ByteArrayContent(fileToDownload.FileData); //FileData is just a byte[] property in this class
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
return response;
}
我得到的典型响应(在任何地方都找不到字节内容):
{
"version": {
"major": 1,
"minor": 1,
"build": -1,
"revision": -1,
"majorRevision": -1,
"minorRevision": -1
},
"content": {
"headers": [
{
"key": "Content-Disposition",
"value": [
"attachment"
]
},
{
"key": "Content-Type",
"value": [
"application/octet-stream"
]
}
]
},
"statusCode": 200,
"reasonPhrase": "OK",
"headers": [],
"requestMessage": null,
"isSuccessStatusCode": true
}
也许我误解了我应该如何处理这些数据,但我觉得这应该从网络 API 调用中得到 returned,因为我明确地添加了它。
我认为您应该使用 FileContentResult,并且可能是比 "application/octet-stream"
更具体的内容类型
public IActionResult GetFile(int id)
{
var fileToDownload = getFileFromDatabase(id);
if (fileToDownload == null)
{
return NotFound();
}
return new FileContentResult(fileToDownload.FileData, "application/octet-stream");
}
我将文件存储在数据库中,我需要 Web API 到 return。数据库正确调用 returns 正确的字节数组(断点显示数组的长度约为 67000,这是正确的),但是当我调用 Web API 时,我从未得到该内容在响应中。我试过使用 MemoryStream 和 ByteArrayContent,但都没有给我应该得到的结果。我试过从 Postman 和我的 MVC 应用程序调用,但都不是 return 字节数组,只有 headers/success/etc.
的基本响应信息public HttpResponseMessage GetFile(int id)
{
var fileToDownload = getFileFromDatabase(id);
if (fileToDownload == null)
{
return new HttpResponseMessage(HttpStatusCode.BadRequest);
}
var response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new ByteArrayContent(fileToDownload.FileData); //FileData is just a byte[] property in this class
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
return response;
}
我得到的典型响应(在任何地方都找不到字节内容):
{
"version": {
"major": 1,
"minor": 1,
"build": -1,
"revision": -1,
"majorRevision": -1,
"minorRevision": -1
},
"content": {
"headers": [
{
"key": "Content-Disposition",
"value": [
"attachment"
]
},
{
"key": "Content-Type",
"value": [
"application/octet-stream"
]
}
]
},
"statusCode": 200,
"reasonPhrase": "OK",
"headers": [],
"requestMessage": null,
"isSuccessStatusCode": true
}
也许我误解了我应该如何处理这些数据,但我觉得这应该从网络 API 调用中得到 returned,因为我明确地添加了它。
我认为您应该使用 FileContentResult,并且可能是比 "application/octet-stream"
更具体的内容类型public IActionResult GetFile(int id)
{
var fileToDownload = getFileFromDatabase(id);
if (fileToDownload == null)
{
return NotFound();
}
return new FileContentResult(fileToDownload.FileData, "application/octet-stream");
}