asp.net-web-api - Swagger 没有从其他项目中找到 XML 和 DataAnnotations
问题描述
我正在旧版 Web 应用程序中将 SOAP API 转换为 REST。
我从一个 webapi 项目(C#)开始——用 swagger 和 swashbuckle 设置它。我为此添加了端点,并用 XML 注释进行了注释。这是使用完整的框架,而不是 .NET Core。
注释都按预期出现在 swagger-ui 中(XML 文档生成工作正常,文件由 swagger 通过配置拾取)。
该项目引用了旧的 SOAP API 类(用 VB.NET 编写)。我已经尝试用RequiredAttribute
(例如)注释这些类并向它们添加 XML 注释,但是这些在 swagger-ui 中根本没有出现。它们设置在一个非常浅的类层次结构中(它们都继承自的基类 - 为了完整性,我将这些信息包括在内)。
这些其他 VB.NET 项目确实启用了 XML 文档,并且我看到 XML 文件以及我在 webapi 项目 bin 目录中添加的文档,正如预期的那样。我已将这些添加到 swagger 配置中,并且我相信它们已正确加载(因为加载页面时没有异常)。
但是 - swagger-ui 中的模型都没有显示DataAnnotation
我添加的任何属性或这些 VB.NET 项目中的任何 XML 文档。
我想让它们出现,并将它们列在 swagger-ui 的 Modles 部分(目前不存在)。
我错过了什么?
更新:
我使用测试模型对外部库(C#,完整框架)进行了一些测试。
这正如预期的那样工作 -DataAnnotation
发现 XML 文档和属性并在 swagger-ui 上显示没有问题。
我现在怀疑 VB.NET,尽管这可能是 VB.NET 项目是 WCF 项目的问题。
更新:
对一个新的 VB.NET 类库和一切都做了同样的工作™,所以......可能是类层次结构或这些其他 VB 项目的东西(可能不是简单的类库或其他东西在路上)。
更新:
这不是继承体系。
解决方案
原来 VB.NET 类都标有旧的SerializableAttribute
.
这会导致模型在 swagger-ui 中看起来完全不同,因此所有注释(DataAnnotation
属性和 XML 注释)都无法正常工作。
这也导致所有属性在它们的名字前加上下划线(我也很好奇,忘了在我的问题中提及)。
为了解决我的实际问题,我在这个 GitHub 问题上找到了解决方案。
即,确保使用正确的 JSON 格式化程序(在 中Global.asax.cs
):
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new DefaultContractResolver();
推荐阅读
- java - JAVA jframe.remove(panel) 无法按预期工作
- visual-studio-2017 - 在 WiX 3.11 / Visual Studio 2017 上自定义 WixUI_Minimal
- javascript - React 构建错误:模块构建失败(来自 ./node_modules/babel-loader/lib/index.js):
- typescript - 使用 TypeScript 编译 Vue 时出错
- sql - SQL Server 存储过程 - 插入语法错误
- mysql - SQL 查询返回 count sale_id = 4 的项目
- r - 使用R从网页中提取表格
- linux - 递归删除 x64 程序集中的文件
- ruby - 在 Ruby 中,在 osx 上,如何从 ruby 脚本中更改提示?
- angular - getNumberOfUsers() 订阅 SPEC 没有期望