将二进制数据从 .net core web api 传输到 typescript 应用程序
Transfer binary data from .net core web api to typescript application
我有 .net core 3.0 web api 应用程序和 angular 8 客户端。到目前为止,我设法使用 json 序列化在它们之间传输一些数据。但我想知道如何将字节数组从 api 传输到客户端。
我发现发送二进制文件的现代流行方式是使用 IActionResult 而不是 HttpResponseMessage。所以在我的控制器中我有这样的代码
[HttpGet("Get-octetstream/{id}")]
public async Task<FileResult> GetAsOctetStream(int id)
{
var bytes= await GetData(id);
var stream = new MemoryStream(bytes);
return File(stream, "application/octet-stream", $"{id}.bin");
}
它工作正常,所以如果我直接在浏览器中发出对应请求,我会立即将我的数据保存在文件中。并且数据正确。
但是当我尝试从 angular 应用程序请求此数据时:
async getOctetStreamFromServer(id: number) {
const url =
Utils.GetWebApiUrl() + `/misc/Get-octetstream/${id}`;
const currentUser = JSON.parse(sessionStorage.currentUser);
const myHttpOptions = {
headers: {
Authorization: "Bearer " + currentUser.jsonWebToken,
ResponseType: "blob",
},
};
const response = await this.httpClient.get(url, myHttpOptions).toPromise();
return response;
}
我收到一个错误:
ERROR Error: Uncaught (in promise): HttpErrorResponse: {"headers":{"normalizedNames":
{},"lazyUpdate":null},"status":200,"statusText":"OK","url":"http://localhost:11080/misc/
Get-octetstream/16588","ok":false,"name":"HttpErrorResponse","message":"Http failure during
parsing for http://localhost:11080/misc/Get-vxsor-octetstream/16588","error":{"error":
{},"text":"\u0011\u0...
那么,有人可以提供一些打字稿代码来从 .net 核心 Web api 服务中获取二进制数据吗?
请更新您的选项:
const myHttpOptions = {
headers: {
Authorization: "Bearer " + currentUser.jsonWebToken,
},
responseType: 'blob'
};
我有 .net core 3.0 web api 应用程序和 angular 8 客户端。到目前为止,我设法使用 json 序列化在它们之间传输一些数据。但我想知道如何将字节数组从 api 传输到客户端。
我发现发送二进制文件的现代流行方式是使用 IActionResult 而不是 HttpResponseMessage。所以在我的控制器中我有这样的代码
[HttpGet("Get-octetstream/{id}")]
public async Task<FileResult> GetAsOctetStream(int id)
{
var bytes= await GetData(id);
var stream = new MemoryStream(bytes);
return File(stream, "application/octet-stream", $"{id}.bin");
}
它工作正常,所以如果我直接在浏览器中发出对应请求,我会立即将我的数据保存在文件中。并且数据正确。
但是当我尝试从 angular 应用程序请求此数据时:
async getOctetStreamFromServer(id: number) {
const url =
Utils.GetWebApiUrl() + `/misc/Get-octetstream/${id}`;
const currentUser = JSON.parse(sessionStorage.currentUser);
const myHttpOptions = {
headers: {
Authorization: "Bearer " + currentUser.jsonWebToken,
ResponseType: "blob",
},
};
const response = await this.httpClient.get(url, myHttpOptions).toPromise();
return response;
}
我收到一个错误:
ERROR Error: Uncaught (in promise): HttpErrorResponse: {"headers":{"normalizedNames":
{},"lazyUpdate":null},"status":200,"statusText":"OK","url":"http://localhost:11080/misc/
Get-octetstream/16588","ok":false,"name":"HttpErrorResponse","message":"Http failure during
parsing for http://localhost:11080/misc/Get-vxsor-octetstream/16588","error":{"error":
{},"text":"\u0011\u0...
那么,有人可以提供一些打字稿代码来从 .net 核心 Web api 服务中获取二进制数据吗?
请更新您的选项:
const myHttpOptions = {
headers: {
Authorization: "Bearer " + currentUser.jsonWebToken,
},
responseType: 'blob'
};