gpt4 book ai didi

c# - Swashbuckle 正在生成没有域类型信息的 Swagger 定义文件(缺少 #/definition/domain-type 部分)

转载 作者:太空宇宙 更新时间:2023-11-03 15:12:14 24 4
gpt4 key购买 nike

当我发布我的 Azure REST API 应用程序时,结果很奇怪

1) “所有”记录的获取方法按预期工作,生成如下:

public async Task<HttpOperationResponse<IList<DomainType>>> GetAllDomainObjectsWithOperationResponseAsync(...);

2) Get by id , Update , DeleteCreate方法,它是用 object 生成的而不是域对象

async Task<HttpOperationResponse<object>> DeleteDomainObjectByIdWithOperationResponseAsync(..)

因此,当我使用 Delete、Update、Create 和 GetById 方法时,服务无法正常工作。如果我手动替换 object对于各自的域类型,它按预期工作,但在每次服务发布后,都会重新创建错误的代码...

我已经尝试了 SwaggerConfig.cs 中的一些东西(例如启用 IncludeParameterNamesInOperationIdFilter),但在这种情况下它似乎没有帮助。

关于造成这种情况的原因以及如何处理的任何想法?

附言我注意到一些更令人不快的行为——比如生成 DateTime作为DateTimeOffset?byte作为byte[] ,但我可以接受。我不想经常打架的是通过所有生成的代码来改变 object类型到适当的域类型 - 在这种情况下,编译器无能为力......

编辑

根据@olydis 的评论,事实证明生成的 swagger 定义文件缺少表单中的返回类型定义 $ref, "#/definition/domain-type" .

MVA course Mastering Azure App Service (模块 4。演示集成 Discovery 大约 3:33)是生成的 swagger 定义文件的可见示例,其中存在这些类型定义。什么会导致 Swashbuckle 不生成此信息?我有最新的 Swashbuckle 版本 5.x.x。为了使 Swashbuckle 正确生成 Swagger 文件,域类型是否必须满足任何先决条件?

Swagger definition file

编辑#2

当前的解决方法

在生成 REST API 客户端之前手动编辑生成的 swagger 定义文件

最佳答案

您可以向 Swashbuckle 提供有关如何制定 Swagger JSON 文件的提示(顺便说一句 - 有些人现在将 swagger 文档称为 Open API 文档)。

当我必须对我的 Web API 进行新的编辑时,这使我不必重新调整我生成的代码

using Swashbuckle.Swagger.Annotations;

namespace MyCorp.WebApi.Controllers
{
[Authorize]
public class CrazyObjectController : ODataController
{
private MyDbModel db = new MyDbModel();

[SwaggerResponse(HttpStatusCode.Created, Type = typeof(CrazyObject))]
[SwaggerResponse(HttpStatusCode.BadRequest, Description = "Invalid Request")]
[Authorize(Roles = "AdminAccess")]
public async Task<IHttpActionResult> Post(CrazyObject crazObj)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}

db.CrazyObjects.Add(crazObj);
await db.SaveChangesAsync();

return Created(crazObj);
}
}
}

在上面的 block 中,魔术是用属性行实现的:[SwaggerResponse(HttpStatusCode.Created, Type = typeof(CrazyObject))] 将此 Type 与 201 响应代码相关联。

关于c# - Swashbuckle 正在生成没有域类型信息的 Swagger 定义文件(缺少 #/definition/domain-type 部分),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40666805/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com