.NET6 Azure Functions中IOpenApiExample示例未在Swagger UI显示问题
解决方案
按以下顺序排查修复即可:
- 第一步:升级OpenAPI扩展包版本
1.3.0及更早的Microsoft.Azure.WebJobs.Extensions.OpenApi包存在请求体示例不渲染的已知bug,先将包升级到最新稳定版。 - 第二步:修正类和属性的访问修饰符
确保两个类满足以下要求:HistoryEvent模型和HistoryEventOpenApiExample示例类都必须为public修饰的非抽象类HistoryEventOpenApiExample必须包含无参构造函数(如果自行定义了带参构造,需手动补充无参构造)HistoryEvent所有需要在示例中展示的属性,必须包含public的get/set访问器,且不能标注[JsonIgnore]、[OpenApiIgnore]特性
- 第三步:匹配命名策略配置
如果你在函数启动配置中自定义了OpenAPI命名策略(比如驼峰命名),需要在Build方法中对齐配置,示例参考:public class HistoryEventOpenApiExample : OpenApiExample<HistoryEvent> { public override IOpenApiExample<HistoryEvent> Build(NamingStrategy namingStrategy = null) { // 如果你用了默认的驼峰命名,直接传入即可 namingStrategy ??= new CamelCaseNamingStrategy(); Examples.Add(OpenApiExampleResolver.Resolve( "默认示例", new HistoryEvent() { ObjectId = "foo", // 其余需要展示的属性赋值 }, namingStrategy)); return this; } } - 第四步:清理缓存重启项目
删掉项目根目录下的bin、obj文件夹,执行dotnet clean && dotnet build后重启函数,清除浏览器缓存后重新访问Swagger页面即可看到示例。
注:如果你的接口同时标注了
[OpenApiRequestBody]和[FromBody]参数绑定,不要给[FromBody]参数加额外的模型验证特性导致结构冲突,保持OpenApiRequestBody的定义优先级即可。
内容的提问来源于stack exchange,提问作者Paul Meems
相关产品推荐
相关产品推荐

