首页 文章

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

提问于
浏览
2

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

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

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

2)对于 Get by idUpdateDeleteCreate 方法,它是用 object 而不是域对象生成的

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

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

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

关于导致这种情况的原因和如何处理的任何想法?

附:我注意到一些更不愉快的行为 - 比如生成 DateTimebytebyte[] ,但我可以忍受 . 我不想定期打架是通过所有生成的代码将 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文件?

Swagger definition file

EDIT #2

Current work-around

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

1 回答

  • 0

    你可以给Swashbuckle提示如何制定Swagger JSON文件(fwiw - 有些人现在将swagger doc称为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响应代码相关联 .

相关问题