C# VS2022开发的gRPC服务Postman调用异常问题求助
解决C#/VS2022 gRPC服务无法被Postman调用的问题
我之前也踩过类似的坑,咱们一步步拆解问题,搞定这个调用问题:
为什么最初的Raw HTTP请求会失败?
首先得明确:gRPC默认是基于HTTP/2二进制协议传输Protobuf数据的,完全不是你熟悉的JSON格式REST API。你直接发{"Name" : "testing grpc http"}这种JSON请求,服务端根本没法解析(所以连日志都没打),Postman自然会返回格式错误。
而HTTPS端点的HTTP/2 over TLS was not negotiated错误,是因为你用HTTP/1.1的请求格式去访问了一个只支持HTTP/2的端点,协议协商直接失败了。
用Postman正确调用gRPC服务的步骤
后来你尝试用Postman的gRPC请求功能但报Invalid protocol: https,问题出在端点的格式写错了,正确的姿势是:
1. 先确认服务端的HTTP/2配置
打开你的Program.cs,确保Kestrel正确配置了HTTP/2(.NET 6+模板默认支持,但显式配置更稳妥):
var builder = WebApplication.CreateBuilder(args); builder.Services.AddGrpc(); // 配置Kestrel协议支持 builder.WebHost.ConfigureKestrel(options => { // HTTP端点:同时支持HTTP1和HTTP2(方便调试) options.ListenLocalhost(5046, o => o.Protocols = HttpProtocols.Http1AndHttp2); // HTTPS端点:只支持HTTP2(gRPC推荐配置) options.ListenLocalhost(7046, o => { o.Protocols = HttpProtocols.Http2; o.UseHttps(); // 用VS生成的开发证书 }); }); var app = builder.Build(); app.MapGrpcService<GreeterService>(); app.Run();
2. Postman里创建正确的gRPC请求
- 打开Postman,点击「New」→ 选择「gRPC Request」
- 在「Server URL」里填写:
- HTTP端点:
grpc://localhost:5046(注意是grpc://不是http://) - HTTPS端点:
grpcs://localhost:7046(注意是grpcs://不是https://)
- HTTP端点:
- 点击「Refresh」,Postman会自动拉取服务的gRPC定义;如果拉取失败,直接手动上传你的
Greeter.proto文件 - 选择
Greeter服务下的SayHello方法 - 请求体填写Protobuf格式的参数(注意字段名是小写的
name,和proto定义一致):{ "name": "testing grpc postman" } - 点击「Invoke」就能正常调用了
3. 解决HTTPS的开发证书信任问题
如果用grpcs://调用时遇到证书错误,因为VS生成的是自签名开发证书,Postman默认不信任:
- 打开PowerShell,导出开发证书:
dotnet dev-certs https --export-path "C:\temp\aspnetcore-dev-cert.pfx" --password "yourpassword" - 打开Postman的「Settings」→「Certificates」→「Client Certificates」,点击「Add Certificate」:
- Host填
localhost:7046 - 选择刚才导出的pfx文件,输入设置的密码
- Host填
- 保存后重新调用HTTPS端点即可
内容的提问来源于stack exchange,提问作者inliner49er
相关产品推荐
相关产品推荐

