Swagger 文档的动态摘要
Dynamic Summary for Swagger documentation
尝试在服务之间使用共享代码时为 .net core swagger 中的文档创建一种灵活的方式。
请看这个例子:
public abstract class Err
{
/// <summary>
/// The error x
/// </summary>
public abstract string Code { get; }
}
public class Err1 : Err
{
public override string Code { get => "100"; }
}
public class Err2 : Err
{
public override string Code { get => "200"; }
}
public class Err3 : Err
{
public override string Code { get => "300"; }
}
[Route("api/test")]
[ProducesResponseType(typeof(string), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(Err), StatusCodes.Status400BadRequest)]
[ApiController]
public class TestController : ControllerBase
{
[HttpGet]
public ActionResult Get()
{
int i = (new Random().Next(1, 11));
if (1 < 4)
return BadRequest(new Err1());
if (i < 7)
return BadRequest(new Err2());
return Ok("OK");
}
}
这当然会产生一个看起来像这样的招摇:
我想要的是这样的:
所以这里重要的是 code=300 不包含在摘要中,因为它没有在这个程序集中使用。
所以我一直在想的是;
- 是否可以做一些反思,找到所有继承的 类 被使用并将其写入 XML(编译时?)而不是普通的摘要部分?
- 覆盖 Swagger 读取摘要的方式并编写您自己的代码。
- 你能连接一些 Swagger 中间件来处理这个问题,这样它就不会从 XML 中读取吗?
如果反射部分不可能,当然下一个最好的办法就是以某种方式硬编码用于此特定服务的所有错误的列表-类。
大家有什么想法吗?
所以,
对于第一部分,据我所知,无法通过反射找出是否使用了 class :(
对于第二部分,如果你用 nswag 替换 swashbuckle,你实际上可以在 swagger UI 中拥有这个不错的“其中之一”功能 :) 但在我的情况下,这还不够,所以我想这是现在不可能。
尝试在服务之间使用共享代码时为 .net core swagger 中的文档创建一种灵活的方式。 请看这个例子:
public abstract class Err
{
/// <summary>
/// The error x
/// </summary>
public abstract string Code { get; }
}
public class Err1 : Err
{
public override string Code { get => "100"; }
}
public class Err2 : Err
{
public override string Code { get => "200"; }
}
public class Err3 : Err
{
public override string Code { get => "300"; }
}
[Route("api/test")]
[ProducesResponseType(typeof(string), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(Err), StatusCodes.Status400BadRequest)]
[ApiController]
public class TestController : ControllerBase
{
[HttpGet]
public ActionResult Get()
{
int i = (new Random().Next(1, 11));
if (1 < 4)
return BadRequest(new Err1());
if (i < 7)
return BadRequest(new Err2());
return Ok("OK");
}
}
这当然会产生一个看起来像这样的招摇:
我想要的是这样的:
所以这里重要的是 code=300 不包含在摘要中,因为它没有在这个程序集中使用。
所以我一直在想的是;
- 是否可以做一些反思,找到所有继承的 类 被使用并将其写入 XML(编译时?)而不是普通的摘要部分?
- 覆盖 Swagger 读取摘要的方式并编写您自己的代码。
- 你能连接一些 Swagger 中间件来处理这个问题,这样它就不会从 XML 中读取吗?
如果反射部分不可能,当然下一个最好的办法就是以某种方式硬编码用于此特定服务的所有错误的列表-类。
大家有什么想法吗?
所以, 对于第一部分,据我所知,无法通过反射找出是否使用了 class :( 对于第二部分,如果你用 nswag 替换 swashbuckle,你实际上可以在 swagger UI 中拥有这个不错的“其中之一”功能 :) 但在我的情况下,这还不够,所以我想这是现在不可能。