news 2026/5/14 15:03:44

使用Postman测试grpc接口-传参错误的反例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用Postman测试grpc接口-传参错误的反例

上述postman设置了两个参数

实际调试发现:第一个参数没有传过来

我是根据包装参数的变量名称传入,为何有错?调查发现:

PipeCenterP3dAndEntityGuidsMessage里面 的变量是P3DGuid,不是根据这个单词来设置。

要以.proto里声明的字段名为准。

也就是说:

  • Proto 字段名是P3dGuid(这里是3d里的小写d),不是P3DGuid
  • 二进制 gRPC 编码只认字段编号12,和你在 JSON 里怎么写无关;JSON 映射一般会把P3dGuid变成p3dGuid(lowerCamelCase),EntityGuid变成entityGuid

C# 生成代码里有时会看到P3DGuid这种属性名,那是 C# 的命名/缩写规则从P3dGuid推出来的,不等于要在.proto或 JSON 里写成P3DGuid

结论:

  • .proto时,以P3dGuid/EntityGuid为准。
  • Postman 发 JSON 时,优先用p3dGuid/entityGuid;若你工具选项是「按 proto 字段名」,则用P3dGuid/EntityGuid(注意仍是P3dGuid,不是P3DGuid)。

修改postman再次验证:

这次正常获得了参数:

都修改为小写,两个参数没有内容了。这说明,参数名称要和proto文件完全一致才行。

知识点:关于UnaryServerHandler技术简介

在 gRPC 里,Unary 表示 「单次请求 → 单次响应」(不是流式)。
UnaryServerHandler(名字可能因语言/包略有不同)一般指:服务端用来处理这一条 Unary RPC 的委托/回调——也就是「收到一个已反序列化的请求对象,你要返回一个响应(或Task)」的那层包装。

可以理解为:框架把「调用你的业务方法」这件事,包成一个Handler,方便在管道里串联(例如拦截器里await next(...))。

是谁调过来的

不是你的业务代码主动去调它,而是 gRPC 服务端运行时在收到客户端请求后调用的,大致顺序是:

  1. 传输层:HTTP/2(常见是 Kestrel / 其它宿主)收到 gRPC 帧。
  2. gRPC 库:按 服务名 + 方法名 路由到已注册的实现。
  3. (可选)服务端拦截器链:若配置了 interceptor,会在UnaryServerHandler(或等价的next) 外包一层,先执行拦截逻辑,再next调进真正的 handler。
  4. 你的实现:最终进到 生成的XXXServiceBase上的 override,或你绑定的那个 Unary 处理委托。

所以:调用方 = gRPC 服务端框架(在 ASP.NET Core 上通常是Grpc.AspNetCore+ 宿主);你的 Service 方法是被它间接调用的。

和你项目的关系

你们.proto里定义的rpc Foo(Req) returns (Res);在服务端生成后,通常会对应 一个 Unary 的 server 方法;运行时收到Foo请求,就会走这条 Unary 管道,最后执行你在XXXServiceBase里写的override Task<Res> Foo(...)

示例说明:

public override async Task<TResponse> UnaryServerHandler<TRequest, TResponse>(
TRequest request,
ServerCallContext context,
UnaryServerMethod<TRequest, TResponse> continuation)

这是Grpc.Core.Interceptors.Interceptor里对 Unary(一元)RPC 的钩子:
每次客户端发起 「单次请求 → 单次响应」 的 RPC,服务端框架都会先走进这个UnaryServerHandler,再(在合适时机)调用你传进来的continuation

  • request:已反序列化后的请求对象。
  • context:本次调用的ServerCallContext(含MethodPeerCancellationToken等)。
  • continuation:“下一棒”,通常是 再往里走:下一个拦截器,或最终真正的XXXGrpcService里的 override 方法。你这里第 46、62 行的await continuation(request, context)就是在把请求交给后续处理链。

是谁调过来的

不是你手写的业务代码直接调用,而是 宿主在注册拦截器后,由 gRPC 服务端管道自动调用:

  1. Kestrel/HTTP2 收到 gRPC 请求;
  2. ASP.NET Core gRPC 宿主 解析方法、反序列化请求;
  3. 在调用具体Service实现之前,按注册顺序执行Interceptor
  4. 执行到GrpcLoggingInterceptor.UnaryServerHandler时,就会进入你第 22 行这个override

也就是说:调用方 = gRPC 服务端运行时(Grpc.Core+ 你们在 Startup/Program 里挂的 Interceptor 管道)。


和上一个问题里UnaryServerHandler的关系

这里的UnaryServerHandler就是 拦截器机制里的“Unary 服务端入口”:你在前后打日志、做try/catch,中间通过continuation(request, context)把控制权交给 真正的 RPC 实现(例如StandardDesignConfigGrpcService.HasAppliedStandardDesignPlanByPipeEntity等)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/14 15:03:34

Cursor破解终极指南:如何永久免费使用AI编程助手

Cursor破解终极指南&#xff1a;如何永久免费使用AI编程助手 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your trial re…

作者头像 李华
网站建设 2026/5/14 15:02:53

如何绕过iOS激活锁:AppleRa1n终极解锁指南与离线解决方案

如何绕过iOS激活锁&#xff1a;AppleRa1n终极解锁指南与离线解决方案 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 面对忘记Apple ID密码或购买二手iPhone时遇到的激活锁问题&#xff0c;你是否感到…

作者头像 李华
网站建设 2026/5/14 15:02:53

终极指南:5步在Windows电脑上直接安装安卓APK应用

终极指南&#xff1a;5步在Windows电脑上直接安装安卓APK应用 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 想在Windows电脑上直接运行安卓应用&#xff0c;却不想安…

作者头像 李华
网站建设 2026/5/14 15:02:35

3步免费实现VR视频转换:无需VR设备也能自由探索360度世界

3步免费实现VR视频转换&#xff1a;无需VR设备也能自由探索360度世界 【免费下载链接】VR-reversal VR-Reversal - Player for conversion of 3D video to 2D with optional saving of head tracking data and rendering out of 2D copies. 项目地址: https://gitcode.com/gh…

作者头像 李华
网站建设 2026/5/14 15:01:57

AI助力芯片热密度分析:从“事后补救”到“设计即散热”

&#x1f393;作者简介&#xff1a;科技自媒体优质创作者 &#x1f310;个人主页&#xff1a;莱歌数字-CSDN博客 211、985硕士&#xff0c;从业16年 从事结构设计、热设计、售前、产品设计、项目管理等工作&#xff0c;涉足消费电子、新能源、医疗设备、制药信息化、核工业等…

作者头像 李华
网站建设 2026/5/14 14:58:24

乡村文旅系统架构设计:从流量获客到价值交付的全链路闭环

一、问题定义在当前的数字化乡村文旅项目中&#xff0c;常见以下技术问题&#xff1a;问题类型具体表现技术本质数据孤岛餐饮、住宿、活动系统独立&#xff0c;无法统一编排多系统间缺乏服务集成信任缺失食材溯源停留在口号&#xff0c;缺乏可验证机制无端到端的溯源存证链路价…

作者头像 李华