Swagger 未从其他项目中找到 XML 和 DataAnnotations
Swagger not finding XML and DataAnnotations from other projects
我正在将遗留 Web 应用程序中的 SOAP API 转换为 REST。
我从一个 webapi 项目 (C#) 开始——用 swagger 和 swashbuckle 设置它。我为此添加了端点,并用 XML 注释进行了注释。这是使用完整的框架,而不是 .NET Core。
评论都按预期出现在 swagger-ui(XML 文档生成工作正常,文件由 swagger 通过配置获取)。
此项目引用了旧的 SOAP API classes(用 VB.NET 编写)。我尝试用 RequiredAttribute
(例如)注释这些 classes 并向它们添加 XML 注释,但这些在 swagger-ui 中根本没有出现。它们设置在一个非常浅的 class 层次结构中(它们都继承自基础 class - 为了完整起见,我包含了这些信息)。
这些其他 VB.NET 项目确实启用了 XML 文档,并且我看到 XML 文件以及我在 webapi 项目 bin 目录中添加的文档,正如预期的那样。我已将这些添加到 swagger 配置中,我相信它们已正确加载(因为加载页面时没有异常)。
但是 - none 中的 swagger-ui 模型显示了我添加的任何 DataAnnotation
属性或这些 XML 文档中的任何 VB.NET 个项目。
我想让它们出现并在 swagger-ui 的模块部分中列出它们(此时不存在)。
我错过了什么?
更新:
我已经使用测试模型对外部库(C#,完整框架)进行了一些测试。
这刚刚按预期工作 - XML 文档和 DataAnnotation
属性被发现并显示在 swagger 上 -ui 没有问题。
我现在怀疑 VB.NET,尽管这可能是 VB.NET 项目是 WCF 项目的问题。
更新:
对新的 VB.NET class 库进行同样的操作,一切正常™,所以...可能是 class 层次结构或其他 VB项目(可能不简单 class 库或其他东西)。
更新:
这不是继承层次结构。
结果 VB.NET 类 都标有好旧的 SerializableAttribute
。
这会导致模型在 swagger-ui 中看起来完全不同,因此 none 注释(DataAnnotation
属性和 XML 注释)可以正常工作。
这也导致所有的属性在他们的名字前都带有下划线(我也很好奇,忘记在我的问题中提到)。
为了解决我的实际问题,我在 this GitHub issue.
上找到了解决方案
即确保使用正确的 JSON 格式化程序(在 Global.asax.cs
中):
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new DefaultContractResolver();
我正在将遗留 Web 应用程序中的 SOAP API 转换为 REST。
我从一个 webapi 项目 (C#) 开始——用 swagger 和 swashbuckle 设置它。我为此添加了端点,并用 XML 注释进行了注释。这是使用完整的框架,而不是 .NET Core。
评论都按预期出现在 swagger-ui(XML 文档生成工作正常,文件由 swagger 通过配置获取)。
此项目引用了旧的 SOAP API classes(用 VB.NET 编写)。我尝试用 RequiredAttribute
(例如)注释这些 classes 并向它们添加 XML 注释,但这些在 swagger-ui 中根本没有出现。它们设置在一个非常浅的 class 层次结构中(它们都继承自基础 class - 为了完整起见,我包含了这些信息)。
这些其他 VB.NET 项目确实启用了 XML 文档,并且我看到 XML 文件以及我在 webapi 项目 bin 目录中添加的文档,正如预期的那样。我已将这些添加到 swagger 配置中,我相信它们已正确加载(因为加载页面时没有异常)。
但是 - none 中的 swagger-ui 模型显示了我添加的任何 DataAnnotation
属性或这些 XML 文档中的任何 VB.NET 个项目。
我想让它们出现并在 swagger-ui 的模块部分中列出它们(此时不存在)。
我错过了什么?
更新:
我已经使用测试模型对外部库(C#,完整框架)进行了一些测试。
这刚刚按预期工作 - XML 文档和 DataAnnotation
属性被发现并显示在 swagger 上 -ui 没有问题。
我现在怀疑 VB.NET,尽管这可能是 VB.NET 项目是 WCF 项目的问题。
更新:
对新的 VB.NET class 库进行同样的操作,一切正常™,所以...可能是 class 层次结构或其他 VB项目(可能不简单 class 库或其他东西)。
更新:
这不是继承层次结构。
结果 VB.NET 类 都标有好旧的 SerializableAttribute
。
这会导致模型在 swagger-ui 中看起来完全不同,因此 none 注释(DataAnnotation
属性和 XML 注释)可以正常工作。
这也导致所有的属性在他们的名字前都带有下划线(我也很好奇,忘记在我的问题中提到)。
为了解决我的实际问题,我在 this GitHub issue.
上找到了解决方案即确保使用正确的 JSON 格式化程序(在 Global.asax.cs
中):
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new DefaultContractResolver();