【问题标题】:Swashbuckle replace Type with other TypeSwashbuckle 将 Type 替换为其他 Type
【发布时间】:2019-08-02 09:50:58
【问题描述】:

我的 asp.net-core web-api 项目中有这个控制器:

[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
    [HttpGet]
    public ActionResult<List<ActualModel>> Get()
    {
        return new List<ActualModel>()
        {
            new ActualModel { StringValue1 = "SomeString" },
            new ActualModel { StringValue1 = "MoreString" }
        };
    }
}

此控制器中的唯一方法返回“ActualModel”列表。它的定义是这样的:

public class ActualModel
{
    public string StringValue1 { get; set; }
}

我的swashbuckle 生成的 Swagger-UI 显示如下:

但我希望Swashbuckle 生成 Swagger-Specification,以便它不包含“ActualModel”,而是包含以下模型:

public class OtherModel
{
    public string StringValue2 { get; set; }
    public int IntValue1 { get; set; }
}

我注意到有一个我认为我可以使用的函数:

services.AddSwaggerGen(c =>
{
    c.MapType<ActualModel>(() => new OpenApiSchema { Type = "string" });

但我不知道如何将“OtherModel”生成为OpenApiSchema,以便它替换“ActualModel”,也找不到有关它的信息或示例。

我尝试用命名空间和没有命名空间的情况下给它完整的类名,我用谷歌搜索“Swashbuckle replace Type with other Type”和“Swashbuckle MapType”,但我找不到任何示例来说明如何简单地将一种类型替换为另一种类型应用程序中定义的类型。

背景:以上当然只是一个例子。在一个“真实”项目中,我有一个通用和分层的类定义,我想在我的控制器中返回,但我在控制器返回的值和实际网络输出之间有一个序列化器,它将数据结构更改为另一个更简单的结构用于打字稿方面。这就是为什么我要替换 swashbuckle 生成的模型定义。

【问题讨论】:

    标签: c# swagger swashbuckle


    【解决方案1】:

    好吧,你可以告诉大摇大摆地展示你正在生产的东西,例如,如果由于模板或层次结构的原因它并不明显:

    [HttpGet]
    [ProducesResponseType(typeof(OtherModel[]), 200)]             // <--- This line
    public ActionResult<List<ActualModel>> Get()
    {
        return new List<ActualModel>()
        {
            new ActualModel { StringValue1 = "SomeString" },
            new ActualModel { StringValue1 = "MoreString" }
        };
    }
    

    但是,确保它们真正兼容是您的工作,没有检查。

    【讨论】:

    • 这条线我已经看过几十次了,并没有得出我可以这样做的结论。感谢您指出显而易见的:D
    猜你喜欢
    • 2015-09-24
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    相关资源
    最近更新 更多