AsyncCrudAppService 在提供 TCreateInput 和 TUpdateInput 时打破了 Swagger

AsyncCrudAppService Breaks Swagger When Providing TCreateInput and TUpdateInput

我最近使用 3.x 目标版本从 https://aspnetboilerplate.com/Templates 下载了一个单页 Web 应用程序 (Angular)。

我只是简单地添加了几个实体,然后开始按照此页面上的步骤操作 https://aspnetboilerplate.com/Pages/Documents/Application-Services

当我的应用程序服务 class 只是继承 AsyncCrudAppService 时,我获取、列出、更新和删除实体的效果确实很好,但是当它正在继承 AsyncCrudAppService,swagger 定义将不再加载。

GitHub 回购:https://github.com/woodman231/MyPhoneBooks

(目前不起作用,不会加载 Swagger 页面)。

我可以通过从

中删除 CreatePhoneBookInput 和 UpdatePhoneBookInput 来加载 swagger 页面

https://github.com/woodman231/MyPhoneBooks/blob/main/aspnet-core/src/MyPhoneBooks.Application/SimpleCrudAppServices/ISimplePhoneBookCrudAppService.cs#L9

https://github.com/woodman231/MyPhoneBooks/blob/main/aspnet-core/src/MyPhoneBooks.Application/SimpleCrudAppServices/SimplePhoneBookCrudAppService.cs#L14

但是,我仍然无法使用此默认实现创建实体。有什么想法吗?

好的,我明白了。我还制作了一个 DIY 应用服务,一些与 DIY 应用服务关联的 DTO Class 名称与与自动化服务关联的 DTO Class 名称发生冲突。它是 .NET 中的 acceptable,因为它们位于不同的名称空间中,但是一旦配置了 swagger 定义,我假设存在相同 DTO 定义的多个实例。我检查了 AbpLogs table 但他们没有给我太多关于加载定义时内部服务器错误的细节。知道这一点肯定会有用。

我已经克隆了你的 repo 和 运行 它并且我找出了错误,首先我在评论中告诉你我验证了文本日志,它说了下一个:

System.InvalidOperationException: Can't use schemaId "$CreatePhoneBookInput" for type "$MyPhoneBooks.SimpleCrudAppServices.Dtos.CreatePhoneBookInput". The same schemaId is already used for type "$MyPhoneBooks.PhoneBooks.Dtos.CreatePhoneBookInput"

发生的事情是你在 SanokeCrudAppServices\DtosPhoneBooks\Dtos

中重复了这两个 类 UpdatePhoneBookInput, CreatePhoneBookInput

两个文件夹中的 类 具有完全相同的名称,这就是问题所在,如果您在 swagger 定义将无错误加载的任何位置更改名称,我已经这样做了工作正常!

在其中一个地方更改名称,一切都会正常工作

就我个人而言,我不喜欢对 Create 使用不同的 Dto,对我来说 Update 更容易使用一个 Dto