首页 > 解决方案 > 如何在 Swagger UI 中隐藏特定架构?

问题描述

我已经在使用 C# (.NET Core 5) 制作的 Web API 中实现了 Swagger 文档。

我有 3 个课程DefaultCommandResultSuccessCommandResultErrorCommandResult

DefaultCommandResult是其他两个继承自的基类。端点中返回的对象是 aSuccessCommandResultErrorCommandResult,并且DefaultCommandResult永远不会返回。我需要做的是隐藏在与基类相关的端点响应中生成的模式DefaultCommandResult招摇用户界面

控制器中的请求:

public ActionResult<DefaultCommandResult<ServerIdCommand>> Get([FromQuery] RecoverServerIdCommand command)
{
    try
    {
        var id = handler.RecoverServerId(command);

        if (id is null)
            return NotFound();

        var output = new ServerIdCommand { Id = id };
        var result = new SuccessCommandResult<ServerIdCommand>(output);

        return Ok(result);
    }
    catch (ObjectNotFoundException ex)
    {
        var result = new ErrorCommandResult<string>(ex.Message);
        return NotFound(result);
    }
    catch (Exception ex)
    {
        var result = new ErrorCommandResult<string>(ex.Message);
        return BadRequest(result);
    }
}

DefaultCommandResult班级:

[SwaggerSubType(typeof(SuccessCommandResult<object>))]
[SwaggerSubType(typeof(ErrorCommandResult<object>))]
    
public class DefaultCommandResult<T> where T : class
{
    public bool Success { get; set; }

    protected DefaultCommandResult(bool success)
    {
        Success = success;
    }
}

该类SuccessCommandResultErrorCommandResult遵循相同的结构,但有错误):

[SwaggerDiscriminator("successCommandResult")]
public class SuccessCommandResult<T> : DefaultCommandResult<T> where T : class
{
    public List<T> Data { get; private set; }

    public SuccessCommandResult() : base(true) { }

    public SuccessCommandResult(List<T> data) : base(true)
    {
        Data = data;
    }

    public SuccessCommandResult(T @object) : base(true)
    {
        if (Data is null)
            Data = new List<T> { @object };
        else
            Data.Add(@object);
    }

}

如何使用SwashbuckleC# 框架实现这一点?提前致谢。

标签: c#swagger-uiswagger-codegenswashbuckle.aspnetcore

解决方案


推荐阅读