首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在API调用中仅为角8中的一个对象设置响应类型?

如何在API调用中仅为角8中的一个对象设置响应类型?
EN

Stack Overflow用户
提问于 2020-08-24 12:50:06
回答 1查看 285关注 0票数 0

我有一个用C#编写的API,它以json的形式发送对象数据,其中一个数据以byte[]的形式存在。

型号:

代码语言:javascript
复制
public class A {
int id;
string name;
byte[] data;
}

API:

代码语言:javascript
复制
[HttpGet]
[Route("~/api/getdata")]
public IActionResult GetData()
{
  A a = new A
    { id= 1,
      name = "JOHN",
      data = { 0, 0, 0, 25 } 
     };
  return Ok(a);
}

当我在我的角度应用程序中调用相同的API时:

代码语言:javascript
复制
getData(): Observable<A> {
    return this.http.get<A>(`${API_URL}/api/getdata`).pipe(
      map(data => data)
    );
  }

我也在我的客户端定义了相同的模式A:

答:

代码语言:javascript
复制
export interface A {
id: number;
name: string;
data: ArrayBuffer;
}

但是当我调用API时,数据被转换为base64编码的字符串。是否有一种方法,使我只获得阵列缓冲区,我不需要编写任何额外的方法,从基本64字符串转换为阵列缓冲区。

我试着用:

代码语言:javascript
复制
getData(): Observable<A> {
   const httpOptions = {
     'responseType': 'arraybuffer' as 'json'
   };
    
   return this.http.get<A>(`${API_URL}/api/getdata`, httpOptions).pipe(
     map(data => data)
    );
}

但是它正在将完整的响应转换为数组缓冲区,正如我想要的那样,数组缓冲区仅用于数据(即arraybuffer类型)。

EN

回答 1

Stack Overflow用户

发布于 2020-08-25 07:35:58

关于你的评论

@MoxxiManagarm问题是,我的数组缓冲区中有200 my的数据,所以在前端,将基本64字符串转换为数组缓冲区将使我的浏览器崩溃。

这是一个严重的架构问题。任何人都不应该在json中传输200 in的数据。请考虑只提供数据的id,并以相应的响应类型(arraybuffer或blob)连接另一个请求来检索数据。

另见:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63561412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档