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
, Delete
和Create
方法,用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 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响应码相关联。