带有外部库的 Swagger 文档

· 1 分钟阅读

使用多个库来拆分代码以应对未来的情况是一件好事。就我个人而言,我喜欢这样做,如果我可以拆分我的逻辑,以便可以在其他项目或项目的一部分中重用它。

至少对我来说,必须拆分数据模型,包括 Entity Framework,以便可以在 Console applicationBlazor applicationAPI 中引用和使用它。

让我们看一下我如何做事情的示例,这是一个项目的屏幕截图,该项目具有一些应用程序和一个包含所有模型的共享库。

这是我从 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 并检查是否可以看到文档。

而且你可以看到我们可以看到文档!

希望对您有所帮助,如有任何疑问请随时联系我!