angular - 带有 Angular 2.0 和 asp.net core(webpack) 和 Typescript 的 Protobuf
问题描述
protobuf.js 版本:“protobufjs”:“6.8.8”,
我是 protobufjs 的新手,并计划在 Angular 2 项目中实现 protobufjs。我已经使用 Angular 2 项目(VS2015)中的“npm install protobufjs --save”安装了 protobufjs。
我有下面的服务,它将 http 请求发送到带有 Content-Type: application/x-protobuf 的 Restful 服务并以 protobuf 格式获取响应
getpersondetails(): Observable {
var headers = new Headers();
headers.append('Content-Type', 'application/x-protobuf');
return this.http.get('/system/data/getpersondetails', { headers });
}
获取如下示例响应,↵*����Alex"(�0�↵&����Du���2355"
如何解码对以下模型对象的响应
//PerosnDetails.ts
export class PersonDetails
{
firstname:string;
lastname:string;
salary: number;
}
有人可以通过为 Angular 2 和 typescript 中的 Get 请求提供一些带有描述性步骤的示例来帮助我。
非常感谢任何帮助。
解决方案
您想要原始(二进制)响应,因此您必须设置选项responseType: "arraybuffer"
:
http.get('/system/data/getpersondetails', {
headers,
responseType: "arraybuffer"
});
然后您可以从数组缓冲区反序列化您的消息:
let details = PersonDetails.deserializeBinary(yourArrayBuffer);
但我推荐使用 gRPC-web 或 Twirp 有两个原因:
- 您可以在 .proto 中使用
service
声明,并且可以为您生成客户端 - 你有一些 URL 映射和错误处理的标准
同样重要的是:google-protobuf 有很多替代品。例如 ts-proto。或者protobuf-ts(这是一个不要脸的插件,我是作者)。它支持 Angular。
推荐阅读
- xml - 如何将嵌套的 XML 元素解组为字符串数组?
- html - 使图像仅为父容器高度的 100%
- java - 如何在 java 1.8 中从 org.jboss.jca.adapters.jdbc.jdk8.WrappedConnectionJDK8 转换为 oracle.jdbc.OracleConnection
- kubernetes - 将环境变量从初始化容器传递到主容器
- jquery - 将数据从视图传递到 dotnet 核心中的控制器
- python - Keras(Tensorflow 后端)错误 - 在图中未找到在 feed_devices 或 fetch_devices 中指定的张量 input_1:0
- java - 如何避免“ServiceConfigException:不存在版本!” 使用 Cloud Endpoints Frameworks 实施 API 管理时出错?
- jquery - 表内表折叠未正确显示
- c# - .Net Core 单选按钮标签助手
- ios - 使用 UITextField 中的信息填写 PDF 文档