带有外部库的 Swagger 文档
使用多个库来拆分代码以应对未来的情况是一件好事。就我个人而言,我喜欢这样做,如果我可以拆分我的逻辑,以便可以在其他项目或项目的一部分中重用它。
至少对我来说,必须拆分数据模型,包括 Entity Framework,以便可以在 Console application、Blazor application 或 API 中引用和使用它。
让我们看一下我如何做事情的示例,这是一个项目的屏幕截图,该项目具有一些应用程序和一个包含所有模型的共享库。

这是我从 API 项目中移出的类的示例,其中每个属性和类都有 summary 的文档。
namespace CustomLibrariesDocumentation.Models
{
/// <summary>
/// WeatherForecast class
/// </summary>
public class WeatherForecast
{
/// <summary>
/// Gets or sets the Date
/// </summary>
public DateOnly Date { get; set; }
/// <summary>
/// Gets or sets the TemperatureC
/// </summary>
public int TemperatureC { get; set; }
/// <summary>
/// Gets or sets the TemperatureF
/// </summary>
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
/// <summary>
/// Gets or sets the Summary
/// </summary>
public string? Summary { get; set; }
}
}
如果我们将其引用到 Console application 并且开始使用该模型,我们可以看到文档,这是 Visual Studio 中的标准功能,因此它可以正常工作,如下所示:

但是,如果我们将其引用到 API 并转到 Swagger,则没有摘要文档。

我们该如何解决这个问题?
首先,我们必须在库上启用 XML 注释,为此,您需要更新项目设置并启用 ``:

这将在构建文件夹中生成一些以文件扩展名 xml 结尾的文件,如下所示:

现在我们已经完成了此操作,我们必须在 Program.cs 上添加一些内容,以便昂首阔步地读取这些文件,这是因为默认情况下它只加载其所在项目的 XML 定义。
它使用了 AddSwaggerGen 内部的一个方法,称为 IncludeXmlComments。
这个想法是,如果我们拥有所有 xml 文件,我们将强制将它们加载到 Swagger 上。
builder.Services.AddSwaggerGen(s =>
{
// Comments
var allXmlFiles = Directory.GetFiles(AppContext.BaseDirectory, "*.xml");
foreach (string xmlFiles in allXmlFiles)
{
s.IncludeXmlComments(xmlFiles);
}
});
很简单,我们从构建目录中获取 xml 文件,并使用 IncludeXmlComments 方法添加它们。
现在我们再次加载 API 并检查是否可以看到文档。

而且你可以看到我们可以看到文档!
希望对您有所帮助,如有任何疑问请随时联系我!