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

本文关键字:文件 定义 Swagger domain-typ definition 缺少 信息 类型 Swashbuckle | 更新日期: 2023-09-27 18:18:25

当我发布我的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课程掌握Azure应用程序服务(模块4)。演示(集成发现约3:33)是生成的swagger定义文件的可见示例,其中包含了这些类型定义。什么可能导致Swashbuckle不生成此信息?我有最新的Swashbuckle版本5.x.x。为了让Swashbuckle正确生成Swagger文件,域类型是否必须满足任何先决条件?

Swagger定义文件

编辑# 2

<

当前方法/strong>

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

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

您可以给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);
        }
  }
}

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