这是一个完整的 .NET 10 gRPC Code-First 示例项目,演示 protobuf-net.Grpc 的所有核心功能。
- ✅ 一元 RPC (Unary RPC)
- ✅ 服务器流式 RPC (Server Streaming)
- ✅ 客户端流式 RPC (Client Streaming)
- ✅ 双向流式 RPC (Bidirectional Streaming)
- ✅ 依赖注入
- ✅ JWT 认证(Bearer Token)
- ✅ gRPC 反射服务(Postman 调试支持)
- ✅ 单元测试和集成测试
- .NET 10 SDK
- protobuf-net.Grpc (Code-First gRPC)
- ASP.NET Core
- JWT Bearer 认证
- xUnit + Moq (测试)
GrpcCodeFirst/
├── GrpcCodeFirst.Server/ # gRPC 服务器
├── GrpcCodeFirst.Client/ # gRPC 客户端
├── GrpcCodeFirst.Tests/ # 单元测试和集成测试
├── GrpcCodeFirst.Contracts/ # 共享契约(消息 + 接口)
└── README.md # 本文档
git clone <repo-url>
cd CodeFirstGrpccd GrpcCodeFirst.Server
dotnet run服务器将在 https://localhost:5001 启动
cd GrpcCodeFirst.Client
dotnet run客户端会自动获取 JWT Token 并完成认证。
dotnet test本项目实现了 JWT Bearer Token 认证:
- 服务端:
GreeterService使用[Authorize]特性保护 - 登录端点:
POST /login可匿名访问,接收userName返回 JWT Token - 客户端: 自动获取 Token 并在 gRPC 调用时附加到请求头
# 1. 获取 Token(服务器必须先启动)
curl -X POST https://localhost:5001/login \
-H "Content-Type: application/json" \
-d '{"userName": "testuser"}' \
--insecure
# 返回示例:
# {"token":"eyJhbGciOiJIUzI1NiIs..."}
# 2. 使用 Token 调用 gRPC 服务(在 Metadata 中添加 Authorization: Bearer <token>)IGreeterService 提供以下方法:
| 方法 | RPC 类型 | 描述 |
|---|---|---|
SayHello |
一元 RPC | 发送问候,返回响应消息 |
StreamServerTime |
服务器流式 | 服务器每秒推送时间戳 |
SumNumbers |
客户端流式 | 客户端发送数字流,服务器返回总和 |
Chat |
双向流式 | 实时聊天,服务器回显消息 |
| 端点 | 方法 | 描述 | 认证 |
|---|---|---|---|
/ |
GET | 健康检查 | 匿名 |
/login |
POST | 获取 JWT Token | 匿名 |
HelloRequest/HelloReply- 一元 RPC 消息TimeTick- 时间戳消息NumberSequence/SumResult- 数字流消息ChatMessage- 聊天消息
由于启用了 gRPC 反射服务,可以使用 Postman 直接调试:
- 启动服务器
- 在 Postman 中选择 "New gRPC Request"
- 输入地址
localhost:5001 - Postman 会自动发现服务方法
注意: 调试认证保护的端点时,需要在 Metadata 中添加 Authorization: Bearer <your-token>
MIT