微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 swagger 集成到 ASP.NET 核心 api 项目中

如何解决将 swagger 集成到 ASP.NET 核心 api 项目中

我有一个 ASP.NET 核心 api 项目,我从 .NET 核心 3.1 开始,然后升级到 5.0。它以前没有集成 swagger,现在我想包含它。

我引入了 Swashbuckle.AspNetCore 软件包 v5.6.3。通读此 page,我修改了我的 Startup.cs 以包含 services.AddSwaggerGen(); 以及 app.UseSwagger();app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json","DemoAPI"));(标准样板内容)。

Startup.cs 的相关部分(目前的情况):

            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1",new OpenApiInfo
                {
                    Title = "DemoAPI",Version = "v1"
                });
                var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
                var xmlPath = Path.Combine(AppContext.BaseDirectory,xmlFile);
                c.IncludeXmlComments(xmlPath);
            });
            if (Environment.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseSwagger();
                app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json","DemoAPI"));
            }

在启动时我看到:

this

有人可以帮我看看这里需要做哪些进一步的设置吗?

解决方法

这是一个例子。您需要确保 xml 注释文件生成已打开,并且您设置了 entryAssembly 和 apiVersion 变量,即“v1”或您喜欢的任何变量。

运行后,只需访问 /swagger 即可查看全部内容。

// Register the Swagger generator,defining 1 or more Swagger documents
services.AddSwaggerGen(c =>
{
    try
    {
        c.SwaggerDoc(apiVersion,new Microsoft.OpenApi.Models.OpenApiInfo { Title = entryAssembly.GetName().Name,Version = apiVersion });
        foreach (string xmlCommentsFile in Directory.GetFiles(AppContext.BaseDirectory,"*.xml"))
        {
            try
            {
                c.IncludeXmlComments(xmlCommentsFile,true);
            }
            catch
            {
                // nothing to be done,fails in unit tests
            }
        }
    }
    catch
    {
        // nothing to be done,fails in unit tests
    }
});

// later on in app setup
// enable middleware to serve generated Swagger as a JSON endpoint.
app.UseSwagger();

// enable middleware to serve swagger-ui (HTML,JS,CSS,etc.),// specifying the Swagger JSON endpoint.
app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint($"/swagger/{apiVersion}/swagger.json",$"{entryAssembly.GetName().Name} {apiVersion}");
});
,

好的,我发现发生了什么。就我而言,我在现有项目中有几个带有路由的端点,这些端点没有 [HttpGet] 属性。这导致 swagger 出错。一旦我解决了这个问题,现在一切都在运行。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。