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

C# 将swagger集成到ASP.NET核心api项目中,c#,asp.net-core,swagger,asp.net-core-webapi,swashbuckle.aspnetcore,C#,Asp.net Core,Swagger,Asp.net Core Webapi,Swashbuckle.aspnetcore,我有一个ASP.NET core api项目,我从.NET core 3.1开始,然后升级到5.0。它以前没有整合的招摇过市,我现在想包括它 我带来了swashback.AspNetCorev5.6.3包。通过阅读本文,我修改了我的Startup.cs以包含services.AddSwaggerGen()以及app.UseSwagger()和app.UseSwaggerUI(c=>c.SwaggerEndpoint(“/swagger/v1/swagger.json”,“DemoAPI”)(标准

我有一个ASP.NET core api项目,我从.NET core 3.1开始,然后升级到5.0。它以前没有整合的招摇过市,我现在想包括它

我带来了
swashback.AspNetCore
v5.6.3包。通过阅读本文,我修改了我的
Startup.cs
以包含
services.AddSwaggerGen()以及
app.UseSwagger()
app.UseSwaggerUI(c=>c.SwaggerEndpoint(“/swagger/v1/swagger.json”,“DemoAPI”)(标准样板文件)

Startup.cs
的相关章节(目前的情况):

启动时,我看到:


有人能帮我看看这里需要做什么进一步的设置吗?

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

运行后,只需访问
/swagger
即可查看所有内容

//注册招摇过市生成器,定义一个或多个招摇过市文档
services.AddSwaggerGen(c=>
{
尝试
{
c、 SwaggerDoc(apiVersion,新的Microsoft.OpenApi.Models.openapinfo{Title=entryAssembly.GetName().Name,Version=apiVersion});
foreach(Directory.GetFiles(AppContext.BaseDirectory,“*.xml”)中的字符串xmlCommentsFile)
{
尝试
{
c、 includexmlcoments(xmlcomentsfile,true);
}
抓住
{
//无需执行任何操作,单元测试失败
}
}
}
抓住
{
//无需执行任何操作,单元测试失败
}
});
//稍后在应用程序内安装
//使中间件能够将生成的Swagger作为JSON端点提供服务。
app.UseSwagger();
//使中间件能够服务于swagger ui(HTML、JS、CSS等),
//指定Swagger JSON端点。
app.UseSwaggerUI(c=>
{
c、 SwaggerEndpoint($“/swagger/{apiVersion}/swagger.json”,$“{entryAssembly.GetName().Name}{apiVersion}”);
});

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

运行后,只需访问
/swagger
即可查看所有内容

//注册招摇过市生成器,定义一个或多个招摇过市文档
services.AddSwaggerGen(c=>
{
尝试
{
c、 SwaggerDoc(apiVersion,新的Microsoft.OpenApi.Models.openapinfo{Title=entryAssembly.GetName().Name,Version=apiVersion});
foreach(Directory.GetFiles(AppContext.BaseDirectory,“*.xml”)中的字符串xmlCommentsFile)
{
尝试
{
c、 includexmlcoments(xmlcomentsfile,true);
}
抓住
{
//无需执行任何操作,单元测试失败
}
}
}
抓住
{
//无需执行任何操作,单元测试失败
}
});
//稍后在应用程序内安装
//使中间件能够将生成的Swagger作为JSON端点提供服务。
app.UseSwagger();
//使中间件能够服务于swagger ui(HTML、JS、CSS等),
//指定Swagger JSON端点。
app.UseSwaggerUI(c=>
{
c、 SwaggerEndpoint($“/swagger/{apiVersion}/swagger.json”,$“{entryAssembly.GetName().Name}{apiVersion}”);
});

好的,我找到了发生的事情。在我的例子中,我在现有项目中有两个端点具有路由,它们没有
[HttpGet]
属性。这导致斯威格出错。一旦我修好了,现在一切都正常了。

好的,我找到了发生的事情。在我的例子中,我在现有项目中有两个端点具有路由,它们没有
[HttpGet]
属性。这导致斯威格出错。一旦我解决了这个问题,现在一切都开始运行了。

Hmm,我不知道尝试/捕获-我对此表示感谢,并将整合它。我已经更新了我的问题,以表明就我所能看到的而言,我认为我已经在做你正在展示的事情了?但是仍然有错误。我唯一能想到的是,您的xml文档代码略有不同,可能这些文件没有按照您的预期输出。我很感激@jxtra,但我想我们可能有点偏离了目标?似乎缺少的不是xml文件,而是一个名为swagger.json的文件?奇怪的是,我启动了一个新的.NET 5.0 webapi项目,默认情况下,一切正常-但在生成的文件中,我可以找到的任何地方都没有任何swagger.json。嗯,我不知道try/catch-我对此表示感谢,并将集成它。我已经更新了我的问题,以表明就我所能看到的而言,我认为我已经在做你正在展示的事情了?但是仍然有错误。我唯一能想到的是,您的xml文档代码略有不同,可能这些文件没有按照您的预期输出。我很感激@jxtra,但我想我们可能有点偏离了目标?似乎缺少的不是xml文件,而是一个名为swagger.json的文件?奇怪的是,我创建了一个新的.NET5.0WebAPI项目,默认情况下,一切正常——但在生成的文件中我找不到任何swagger.json。
            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"));
            }