2

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

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

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

2) 对于Get by idUpdate和方法,它是用Delete而不是域对象生成的Createobject

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

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

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

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

PS我注意到一些更不愉快的行为——比如生成DateTimeasDateTimeOffset?byteas byte[],但我可以忍受。我不想定期战斗的是通过所有生成的代码将object类型更改为适当的域类型 - 在这种情况下编译器无能为力......

编辑

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

MVA 课程中掌握 Azure 应用服务(模块 4。3:33 左右集成发现的演示)是生成的 swagger 定义文件的可见示例,并且存在这些类型定义。什么可能导致 Swashbuckle 不生成此信息?我有一个最新的 Swashbuckle 版本 5.xx 是否有 domain-type 必须满足的任何先决条件才能使 Swashbuckle 正确生成 Swagger 文件?

招摇定义文件

编辑#2

当前的解决方法

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

4

1 回答 1

0

您可以向 Swashbuckle 提供有关如何制定 Swagger JSON 文件的提示(fwiw - 现在有些人将 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 响应代码相关联。

于 2017-07-18T11:44:35.170 回答