.net5 gRPC支持swagger 同时支持grpc和webapi

  1. 安装对应的nuget - 目前只有previce版本
    Microsoft.AspNetCore.Grpc.HttpApi
    Microsoft.AspNetCore.Grpc.Swagge

  2. program.cs中调整监听端口同时支持http1和http2

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                    webBuilder.ConfigureKestrel(kerstrel =>
                    {
                        kerstrel.Listen(IPAddress.Any, 5003, o => o.Protocols = HttpProtocols.Http2);

                        kerstrel.Listen(IPAddress.Any, 5000, o => o.Protocols = HttpProtocols.Http1AndHttp2);
                    });
                });
  1. Startup.cs中配置服务
    ConfigureServices中添加
services.AddGrpc();
            services.AddGrpcHttpApi();
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
            });
            services.AddGrpcSwagger();

Configure中添加

app.UseSwagger();
            app.UseSwaggerUI(c =>
            {
                c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
            });
  1. proto文件中添加http1路由信息
    4.1 添加import
    import "google/api/annotations.proto";

4.2 添加http访问方式信息
原来的方法为

rpc SayHello (HelloRequest) returns (HelloReply);

将原方法调整为

rpc SayHello (HelloRequest) returns (HelloReply){
	  option (google.api.http) = {
      get: "/v1/greeter/{name}"
    };
  }
  1. 将import需要使用的几个proto文件放到代码中与Protos目录同级的对应google目录中,如下,不用在项目中引用文件
    ├─google
    │ ├─api
    │ └─protobuf
    ├─Properties
    ├─Protos
    └─Services

启动swagger即可

!注意配置http url信息时参数需要与定义的参数一致

最好将http1和http2端口分开,另外在客户端记得将proto文件中添加的导入和http1信息删除

此外在测试过程中遇到客户端无法生成的情况
报错

未能使用“ProtoCompile”任务的输入参数初始化该任务

从路径 C:\Users\xx\.nuget\packages\grpc.tools\2.34.0\build\_protobuf\net45\Protobuf.MSBuild.dll 处的程序集 Protobuf.MSBuild, Version=0.0.0.0, Culture=neutral, PublicKeyToken=d754f35622e28bad 加载的“ProtoCompile”任务不支持“AdditionalProtocArguments”参数。请验证任务上是否存在该参数、<UsingTask> 是否指向正确的程序集,以及它是否是可设置的公共实例属性。	

需要调整Grpc.Tools包为2.34.0

测试代码
客户端代码
[参考]
asp.ner core 5.0 Grpc双向认证 和 restful api包装 外加swagger启用【VSCode创建】

posted @ 2022-06-24 14:46  Hey,Coder!  阅读(287)  评论(0编辑  收藏  举报