大家好,我是失业在家,正在找工作的博主Jerry,找工作之余,看到.Net 7.0 RC2发布了,就想测试下.Net 7.0 RC2 gRPC JSON 转码为 Swagger/OpenAPI文档的特性,这个特性大大提高了测试gRPC接口的方便性。本来以为按照官方文档,也就是几分钟的事,结果搞了几个小时才成功!我也是服了官方的文档了!

我现在把要要注意的几个问题列出来,给要使用这个特性的程序员节约一点时间。

一、官方文档对gRPC JSON 转码配置描述不完整

这个特性是基于gRPC JSON 转码配置的,也就是说我们先要配置gRPC JSON 转码才能使用该特性。

// Add services to the container.
builder.Services.AddGrpc().AddJsonTranscoding();

如上我们在Program.cs中的代码,先要先加上gRPC JSON转码。如果按照官方文档直接在.proto文件的rpc方法中增加option

 option (google.api.http) = {
get: "/v1/greeter/{name}"
};

则编译会报错,“Option "(google.api.http)" unknown. Ensure that your proto definition file imports the proto which defines the option.”

要先按照另一个官方文档专门配置gRPC JSON转码。要在.proto文件中增加“import "google/api/annotations.proto";

import "google/api/annotations.proto";

二、官方文档对gRPC JSON 转码配置描述不清楚

加上了import..., 还是会编译出错,"Import "google/api/annotations.proto" was not found or had errors.".

原因就是文档里的这一句“Imported from the google/api/annotations.proto file. The google/api/http.proto and google/api/annotations.proto files need to be in the project.”实在说的不清楚。

其实,我们要在我们项目的根目录建立google文件夹,然后在下面建立api文件夹,再把这两个文件放到里面。如下截图:

然后还要确保项目文件中,不要把这两个文件包含到Protobuf节点中。不然在启动程序的时候就会出现对象转换失败的错误,“[A]Google.Protobuf.ExtensionValue`1[Google.Api.HttpRule] cannot be cast to [B]Google.Protobuf.ExtensionValue`1[Google.Api.HttpRule]. Type A originates from 'Google.Protobuf, Version=3.19.4.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604' in the context 'Default' at location 'D:\\Study\\Test\\GrpcService4TestSwagger\\bin\\Debug\\net7.0\\Google.Protobuf.dll'. Type B originates from 'Google.Protobuf, Version=3.19.4.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604' in the context 'Default' at location 'D:\\Study\\Test\\GrpcService4TestSwagger\\bin\\Debug\\net7.0\\Google.Protobuf.dll'”

<ItemGroup>
<Protobuf Include="Protos\greet.proto" GrpcServices="Server" />
</ItemGroup>

这样就算配置gRPC JSON转码完成了,程序终于可以运行起来了。

三、官方文档上的代码片段不正确

这时候,如果你访问Swagger的页面还是会出错,“System.IO.FileNotFoundException:“Could not find file 'D:\Study\Test\GrpcService4TestSwagger\bin\Debug\net7.0\Server.xml”,我真是服了这个官方文档了,要把官方文档给的代码:

var filePath = Path.Combine(System.AppContext.BaseDirectory, "Server.xml");
c.IncludeXmlComments(filePath);
c.IncludeGrpcXmlComments(filePath, includeControllerXmlComments: true);

改成这样才行:

 var xmlFilename = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var filePath = Path.Combine(AppContext.BaseDirectory, xmlFilename);
c.IncludeXmlComments(filePath);
c.IncludeGrpcXmlComments(filePath, includeControllerXmlComments: true);

终于, gRPC JSON 转码为 Swagger/OpenAPI文档的特性可以成功运行了。

四、找工作

博主有15年以上的软件技术实施经验(Technical Leader),专注于微服务和云原生(K8s)软件架构设计、专注于 .Net Core\Java开发和Devops构建发布。
博主10年以上的软件交付管理经验(Project Manager & Product Ower),致力于敏捷(Scrum)项目管理、软件产品业务需求分析和原型设计。
博主熟练配置和使用 Microsoft Azure云。
博主为人诚恳,积极乐观,工作认真负责。

我家在广州,也可以去深圳工作。做架构和项目管理都可以。有工作机会推荐的朋友可以加我微信 15920128707,微信名字叫Jerry。

关于.Net 7.0 RC gRPC JSON 转码为 Swagger/OpenAPI文档的注意事项的更多相关文章

  1. .NET7 gRPC JSON转码+OpenAPI

    gRPC JSON转码 gRPC JSON 转码允许浏览器应用调用 gRPC 服务,就像它们是使用 JSON 的 RESTful API 一样. 浏览器应用不需要生成 gRPC 客户端或了解 gRPC ...

  2. Core3.0使用Swagger接口文档

    前言 此方法为百度搜索结果,原文链接找不到了 步骤 1.引用Nuget Swashbuckle.AspNetCore 2.Startup.cs配置 //注册swagger服务,定义1个或者多个swag ...

  3. Solr 4.4.0利用dataimporthandler导入本地pdf、word等文档

    1. 创建本地目录 $ mkdir /usr/local/contentplatform/solr/solr/core1/file1 $ ls -lh total 88M -rw-r--r-- tnu ...

  4. json包中的Marshal&Unmarshal 文档译本

    Marshal func Marshal(v interface{})([]byte, error) Marshal returns the JSON encoding of v. Marshal返回 ...

  5. QT210 Android4.0源码编译和烧录文档整理

    开发环境说明: Ubuntu 12.04 LTS 32bit 源码文件目录: 勤研光盘2013-5-4\4.0 https://github.com/jackyh (建议在Linux环境下通过git下 ...

  6. PDF 补丁丁 0.4.2.1218 测试版发布:新增拆分文档功能

    新的测试版的“提取页面”功能增加了拆分文档的选项. 可按照指定的页码范围(用“:”分号分割).顶层书签或指定页数三种方式,将一个 PDF 文档拆分成多个文档. 此功能还支持多个文档批量操作. 欢迎各位 ...

  7. ASP.NET Core 3.0 使用gRPC

    一.简介 gRPC 是一个由Google开源的,跨语言的,高性能的远程过程调用(RPC)框架. gRPC使客户端和服务端应用程序可以透明地进行通信,并简化了连接系统的构建.它使用HTTP/2作为通信协 ...

  8. 机器学习 ML.NET 发布 1.0 RC

    ML.NET 是面向.NET开发人员的开源和跨平台机器学习框架(Windows,Linux,macOS),通过使用ML.NET,.NET开发人员可以利用他们现有的工具和技能组,为情感分析,推荐,图像分 ...

  9. 关于ML.NET v1.0 RC的发布说明

    ML.NET是面向.NET开发人员的开源和跨平台机器学习框架(Windows,Linux,macOS).使用ML.NET,开发人员可以利用他们现有的工具和技能组,通过为情感分析,推荐,图像分类等常见场 ...

随机推荐

  1. AI智能剪辑,仅需2秒一键提取精彩片段

    如今短视频已成为人们娱乐社交的主要形式,很多用户也开始由观众逐渐转变为短视频制作传播者,然而复杂的视频剪辑工具却令他们望而止步.如何才能降低短视频制作剪辑门槛,让更多无经验者也能制作出优质的短视频内容 ...

  2. JVM学习之 内存结构

    目录 一.引言 1.什么是JVM? 2.学习JVM有什么用 3.常见的JVM 4.学习路线 二.内存结构 1. 程序计数器 1.1 定义 1.2作用 2. 虚拟机栈 2.1定义 2.2栈内存溢出 2. ...

  3. Java面试题(三)--虚拟机

    1 内存结构 1.简述一下JVM的内存结构?(高频) JVM在执行Java程序时,会把它管理的内存划分为若干个的区域,每个区域都有自己的用途和创建销毁时间.如下图所示,可以分为两大部分,线程私有区和共 ...

  4. HDFS的读写流程——宏观与微观

    HDFS的读写流程--宏观与微观 HDFS:分布式文件系统,负责存放数据 分布式文件系统:就是将我们的数据放到多台电脑上存储. 写数据:就是将客户端上的数据上传到HDFS 宏观过程 客户端向HDFS发 ...

  5. 【MySQL】从入门到精通8-SQL数据库编程

    上期:[MySQL]从入门到精通7-设计多对多数据库 第零章:Mac用户看这里: mac终端写MySQL和windows基本相同,除了配置环境变量和启动有些许不同以外. 先配置环境变量,在终端输入vi ...

  6. 【java】学习路线1-类型转换、隐式转换、强制转换

    /**文档注释,这里是一段文章一般放在类的外面*/public class HelloWorld{    //这个是注释的文本    public static void main(String[] ...

  7. 【Android 逆向】ARM while 逆向

    #include <stdio.h> int dowhile(int n){ int i = 1; int s = 0; do{ s += i; }while(i++ < n); r ...

  8. 【SQLServer】max worker threads参数说明

    本文介绍如何使用SQL Server Management Studio或Transact-SQL在SQL Server中配置最大工作线程服务器配置选项. max worker threads选项配置 ...

  9. 多版本并发控制 MVCC

    介绍多版本并发控制 多版本并发控制技术(Multiversion Concurrency Control,MVCC) 技术是为了解决问题而生的,通过 MVCC 我们可以解决以下几个问题: 读写之间阻塞 ...

  10. Web 开发相关概念

    Web 开发相关概念 前端 后端 全栈 前端 Front-end:网站中用户看到的部分 HTML CSS JavaScript 库和框架 设计工具 后端 Back-end:网站中用户看不到的部分 编程 ...