请说明在 .NET Core 应用中,如何配置 gRPC-Web 以便浏览器客户端能够调用 gRPC 服务?需要涵盖必要的包引用、服务配置以及浏览器端的调用方式。
考察说明
考查对 .NET Core 中 gRPC-Web 支持的理解,包括配置步骤和浏览器端调用限制。
回答思路
- 【回答框架 1】gRPC-Web 是 gRPC 的协议扩展,允许浏览器客户端通过 HTTP/1.1 调用 gRPC 服务。在 .NET Core 中,需要引用 Grpc.AspNetCore.Web 包。
- 【回答框架 2】配置步骤:在 Startup.cs 的 ConfigureServices 中添加 gRPC 服务,并在 Configure 中使用 UseGrpcWeb() 中间件,同时为需要支持的 gRPC 服务启用 .EnableGrpcWeb()。
- 【回答框架 3】浏览器端只能使用 gRPC-Web 协议,不支持完整的 gRPC 特性,如客户端流。需要通过 JavaScript 客户端(如 @improbable-eng/grpc-web)调用。
- 【回答框架 4】确保客户端请求包含正确的 content-type:application/grpc-web,且服务器端正确配置 CORS 以允许跨域请求。
- 【回答框架 5】注意:gRPC-Web 是实验性功能,在 .NET Core 3.0 及以后版本中可用,但仍需考虑与浏览器兼容性。
- 【关键点 1】使用 UseGrpcWeb() 中间件和 EnableGrpcWeb() 扩展方法配置 gRPC-Web。
- 【关键点 2】引用 Grpc.AspNetCore.Web 包。
- 【关键点 3】浏览器端仅支持 unary 和 server streaming 调用。
- 【易错点 1】不要遗漏 CORS 配置,否则浏览器跨域请求会被拒绝。
- 【易错点 2】不要混淆 gRPC-Web 与 gRPC 的完整协议,浏览器端不能使用客户端流。