在ASP.NET中可以同时使用gRPC和gRPC-Web。为此,您需要针对两个协议分别配置您的ASP.NET应用程序。下面是一些要点:
1.在 gRPC 服务器端中添加gRPC-Web中间件:
public void ConfigureServices(IServiceCollection services)
{
services.AddGrpc();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseRouting();
app.UseGrpcWeb(new GrpcWebOptions { DefaultEnabled = true });
app.UseEndpoints(endpoints =>
{
endpoints.MapGrpcService();
endpoints.MapGet("/", async context =>
{
await context.Response.WriteAsync("Hello World!");
});
});
}
2.在gRPC客户端中添加gRPC-Web支持:
var httpClient = new HttpClient(new GrpcWebHandler(GrpcWebMode.GrpcWeb, new HttpClientHandler()));
var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions { HttpClient = httpClient });
var client = new MyService.MyServiceClient(channel);
这些示例通过GrpcWebHandler将gRPC-Web协议添加到了.NET Core的HTTP客户端中。
在这里有更多的 gRPC和gRPC-Web 的ASP.NET示例:https://docs.microsoft.com/en-us/aspnet/core/grpc/basics?view=aspnetcore-5.0#grpc-web-%EF%B8%8F
注意:尽管gRPC-Web是一个在浏览器中使用gRPC的好方法,但它并不是完全遵循gRPC标准的。如果您需要完全遵循标准,请考虑使用浏览器原生支持的gRPC。