public class CompanyValidationResponse
{
/// <example>1234</example>
public int CompanyId { get; set; }
/// <example>Damage, Inc</example>
public string CompanyName { get; set; }
}
namespace WebApplication44
{
/// <summary>
/// Display Weather Forecast
/// </summary>
public class WeatherForecast
{
/// <summary>
/// Date of the weather
/// </summary>
public DateTime Date { get; set; }
/// <summary>
/// Temperature in Degree Celesuis
/// </summary>
public int TemperatureC { get; set; }
/// <summary>
/// Temperature in Fahrenheit
/// </summary>
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
/// <summary>
/// Summary of the Weather. It can be "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
/// </summary>
public string? Summary { get; set; }
}
}
接下来,您需要在Visual Studio中的项目属性中启用Documentation File > Generate a File containing API documentation option-无需更改位置。 最后,修改swagger生成代码,如下所示。
var xmlDoc = Path.ChangeExtension(Assembly.GetExecutingAssembly().Location, "xml");
builder.Services.AddSwaggerGen(options => options.IncludeXmlComments(xmlDoc, true));
// A DTO in the domain project
namespace My.Example.Project.Domain.DTOs
{
public class MyApiDto
{
/// <summary>
/// Unique ID.
/// </summary>
/// <example>b521fb69-d6fc-4c20-83bf-46a3f391eb52</example>
public Guid Id { get; set; }
/// <summary>
/// Name
/// </summary>
/// <example>John</example>
public string Name { get; set; }
}
}
当然,您将在My.Example.Project.Domain项目中记录您的API端点。
// A controller in the API project
namespace My.Example.Project.Api.Controllers
{
[ApiController]
[Route("api")]
public class DtoController : ControllerBase
{
private readonly IMediator _mediator;
public TextFilesController(IMediator mediator)
{
_mediator = mediator;
}
/// <summary>
/// Gets the DTO.
/// </summary>
/// <response code="200">API got the DTO</response>
[HttpGet("something/{id}", Name = nameof(GetDto))]
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(GetDtoResponse))]
public async Task<ActionResult<GetDtoResponse>> GetDto(Guid id)
{
var request = new GetDtoRequest(id);
var respone = await _mediator.Send(request); // returns the DTO from the Domain project
return Ok(response);
}
}
}
builder.Services.AddSwaggerGen(options =>
{
options.SwaggerDoc("v1", new OpenApiInfo()
{
Version = "1.0.0",
Title = "My Project API",
});
// Include docs from current API assembly (as described in MS Docs)
var executingAssembly = Assembly.GetExecutingAssembly();
options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, $"{executingAssembly.GetName().Name}.xml"));
// Additionally include the documentation of all other "relevant" projects
var referencedProjectsXmlDocPaths = executingAssembly.GetReferencedAssemblies()
.Where(assembly => assembly.Name != null && assembly.Name.StartsWith("My.Example.Project", StringComparison.InvariantCultureIgnoreCase))
.Select(assembly => Path.Combine(AppContext.BaseDirectory, $"{assembly.Name}.xml"))
.Where(path => File.Exists(path));
foreach (var xmlDocPath in referencedProjectsXmlDocPaths)
{
options.IncludeXmlComments(xmlDocPath);
}
});
3条答案
按热度按时间q1qsirdb1#
您可以启用XML注解,然后使用
<example>
元素来定义示例。下面是使用<example>
的示例:sgtfey8w2#
首先,你需要在类中添加XML文档,下面是一个例子。
接下来,您需要在Visual Studio中的项目属性中启用
Documentation File > Generate a File containing API documentation option
-无需更改位置。最后,修改swagger生成代码,如下所示。
然后,您将能够看到这样的Open API文档。
xriantvc3#
添加多个项目的文档
我想添加一个解决方案,用于当所记录的类型不在您的主web/ api项目中,而是在其他 Domain 或 Model 项目中时,如何显示示例和其他文档,正如应用Seperation of concerns所建议的那样。
我之所以遇到这个问题,是因为我通常使用MediatR将持有端点的 API 项目与驻留在 Domain 项目中的实际业务逻辑分离,但我的API可能会返回在 Domain 项目中定义的类型,因此我仍然希望记录返回的类型。
下面是多项目解决方案的外观(概念上):
为了使其正常工作,您需要通过在相应的
*.csproj
文件中进行设置,为希望包含文档的每个项目启用XML文档的生成:现在,在
My.Example.Project.Domain
项目中使用<example>
记录模型/ DTO对象。当然,您将在
My.Example.Project.Domain
项目中记录您的API端点。现在您只需要配置Swagger Gen来查找所有项目的
.xml
文档文件,而不是像Microsoft文档中所示的那样只查找执行程序集的一个。为了确定 “相关” 程序集,您可以在当前程序集上使用
GetReferencedAssemblies()
。由于您的API将返回您的域项目的类型,因此域程序集将在API项目中被引用。不幸的是,大量您尚未创建的其他程序集也将被返回。由于没有 * 我自己的程序集 * 的概念并且每个程序集都与任何其他程序集一样,筛选程序集的唯一方法是使用它们的名称,例如使用StartsWith()
。然后像创建单个文件一样创建路径,最后检查文档.xml
文件是否确实存在在API项目中引用了不生成.xml
文档的项目。最后但并非最不重要的一点是,遍历您刚刚创建的所有路径,并告诉Swagger Gen在使用
options.IncludeXmlComments()
生成OpenAPI规范时包括这些文件。现在,当您启动解决方案时,应该会显示文档和示例。