当我发布我的Azure REST API应用程序时,它有奇怪的结果
1)获取“所有”记录的方法按预期工作,生成如下:
public async Task<HttpOperationResponse<IList<DomainType>>> GetAllDomainObjectsWithOperationResponseAsync(...);
2)对于 Get by id
, Update
, Delete
和 Create
方法,它是用 object
而不是域对象生成的
async Task<HttpOperationResponse<object>> DeleteDomainObjectByIdWithOperationResponseAsync(..)
因此,当我使用此Delete,Update,Create和GetById方法时,服务无法正常工作 . 如果我用相应的域类型手动替换 object
它正在按预期工作,但在每次服务发布后,将重新创建错误的代码...
我已经尝试过SwaggerConfig.cs中的一些东西(例如启用了 IncludeParameterNamesInOperationIdFilter
),但在这种情况下似乎没有帮助 .
关于导致这种情况的原因和如何处理的任何想法?
附:我注意到一些更不愉快的行为 - 比如生成 DateTime
和 byte
为 byte[]
,但我可以忍受 . 我不想定期打架是通过所有生成的代码将 object
类型更改为适当的域类型 - 在这种情况下编译器无法帮助...
EDIT
根据@olydis的评论,结果表明生成的swagger定义文件缺少表单 $ref, "#/definition/domain-type"
中的返回类型定义 .
在MVA course Mastering Azure App Service(模块4.演示集成发现大约3:33)是生成的swagger定义文件的可见示例,并且存在这些类型定义 . 什么可能导致Swashbuckle不生成此信息?我有一个最新的Swashbuckle版本5.x.x.是否存在域类型必须满足的先决条件才能使Swashbuckle正确生成Swagger文件?
EDIT #2
Current work-around
在生成REST API客户端之前,手动编辑生成的swagger定义文件
1 回答
你可以给Swashbuckle提示如何制定Swagger JSON文件(fwiw - 有些人现在将swagger doc称为Open API文档) .
当我不得不对我的Web API进行新的编辑时,这使我不必重新调整生成的代码
在上面的块中,使用属性行实现魔术:
[SwaggerResponse(HttpStatusCode.Created, Type = typeof(CrazyObject))]
将Type
与201响应代码相关联 .