AddSwaggerGen -在swagger.json中为未使用的DTO创建对象

r1zhe5dt  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(52)

我使用services.AddSwaggerGen()来创建一个swagger.json:

services.AddSwaggerGen(c =>
{
    c.CustomOperationIds(apiDesc => {
        if (apiDesc.TryGetMethodInfo(out var methodInfo)) {
            if (methodInfo.GetCustomAttributes(typeof(HttpMethodAttribute)).FirstOrDefault() is HttpMethodAttribute attr) {
                if (!string.IsNullOrEmpty(attr.Template)) {
                    return attr.Template;
                }
            } 
        }

        return $"{apiDesc.HttpMethod.Substring(0, 1)}{apiDesc.HttpMethod.Substring(1, apiDesc.HttpMethod.Length -1).ToLower()}";
    });

    c.SwaggerDoc("v1", new OpenApiInfo() {
        Title = "Time API",
        Version = "v1",

       });
});

字符串
这是工作到目前为止.但现在,我有一个DTO,这是不使用explizit在控制器.而这个DTO是不是作为一个对象添加到swagger.json.是否有可能配置,这DTO也将包括在swagger.json?

sg3maiej

sg3maiej1#

我认为你应该在DTO中添加一个其他地方没有引用的属性。请按照文档的说明添加Swashbuckle.AspNetCore.Annotations包,然后将SwaggerSchemaAttribute添加到你的DTO中,如下所示:

[SwaggerSchema(Required = new[] { "Description" })]
public class Product
{
    [SwaggerSchema("The product identifier", ReadOnly = true)]
    public int Id { get; set; }

    [SwaggerSchema("The product description")]
    public string Description { get; set; }

    [SwaggerSchema("The date it was created", Format = "date")]
    public DateTime DateCreated { get; set; }
}

字符串
请注意,使用属性来描述控制器和模型是一种很好的做法,因为它们将被添加到嵌入式网页以及swagger.json文件中

相关问题