c#配置swagger文档

.net core6.0注入swagger,.net core 配置swagger文档

6.1号更新token验证

builder.Services.AddSwaggerGen(c =>
{
    //添加token验证
    c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
    {
        Description = "请输入token,格式为 Bearer xxxxxxxx",
        Name = "Authorization", //标头名
        In = ParameterLocation.Header,  //表示头部
        Type = SecuritySchemeType.ApiKey,
        BearerFormat = "JWT",  //token
        Scheme = "Bearer"  
    });
    //添加验证条件
    c.AddSecurityRequirement(new OpenApiSecurityRequirement {
        {
            new OpenApiSecurityScheme{
                Reference =new OpenApiReference{
                    Type = ReferenceType.SecurityScheme,
                    Id ="Bearer"
                }
            },new string[]{ }//不设权限
        }
    });
    c.SwaggerDoc("v1", new()
    {
        Title = builder.Environment.ApplicationName,//名字
        Version = "v1",//版本
        Description = $"会员管理接口平台",
    });
    var path = Path.Combine(AppContext.BaseDirectory, "DG.QIAN.Members.Api.xml"); // xml文档绝对路径,"API"为项目名
    c.IncludeXmlComments(path, true); // true : 设置控制器层注释
    c.OrderActionsBy(o => o.RelativePath); // 排序用的
});

添加划线代码即可添加待标头的请求,如

 在里面填写对应的token值就行了

前言:虽然现在已经有.net8.0了,但是.net6因为已经出来两年了,所以更多公司在用,而且6.0和8.0的差别并不是很大,还是有一些可学的地方的,目前.net core 6.0的资料是最多的,所以搭建项目建议使用6.0会比较好

下面演示环境为visual studio2022+.net core webapi,其他项目也类似,讲的会比较细

在.net3.0之前创建项目会自动添加swagger管理,后面的更新之后需要手动开启openapi才会有支持:例如

#新建项目添加swagger

勾选openapi支持

 直接运行,你会看到直接就能使用swagger,这是新建项目自带的 

但是他不会有对方法的注释,需要添加一些注入,如:

图片中有详细的解释,一眼看过去会比较乱,仔细看所有的东西都在里面 

 代码:

using Microsoft.OpenApi.Models;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();
//注入swagger
builder.Services.AddEndpointsApiExplorer();//生成文档
builder.Services.AddSwaggerGen(c =>//设置文档内容
{
    c.SwaggerDoc("v1", new()
    {
        Title = builder.Environment.ApplicationName,//组名字,右上角可以选择
        Version = "v1",//版本
        Description = $"接口文档说明,放这里 ",
        Contact = new OpenApiContact()
        {
            Name = "zhangsan",//名字
            Email = "xxx@qq.com",//邮箱
            Url = null
        }//通常这里都是放联系,地址的,一般不用
    });
    // xml文档绝对路径,"WebApplication2"为项目名,表示读取该项目的xml文件
    var file = Path.Combine(AppContext.BaseDirectory, "WebApplication2.xml");
    // xml文档绝对路径
    var path = Path.Combine(AppContext.BaseDirectory, file);
    // true : 设置控制器层注释,对控制器中方法的注释的显示
    c.IncludeXmlComments(path, true);
    // 对方法名的名称进行排序,首字母顺序。
    c.OrderActionsBy(o => o.RelativePath);
});
var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())//只有当程序处于debug的情况才开启swagger
{
    //分别注入中间件和ui中间间
    app.UseSwagger();
    //第一个为路径不能更改,第二个为版本可以更改
    app.UseSwaggerUI(c => c.SwaggerEndpoint(
        "/swagger/v1/swagger.json", $"{builder.Environment.ApplicationName} v1"));
}
app.UseAuthorization();

app.MapControllers();

app.Run();

将上面代码放进去会报错,因为我们设置了xml文档地址:开启方法》右键项目》属性》生成》输出》打开“生成包含api的文档的文件”

之后就可以直接运行了。

#在旧项目中添加swagger

还是以.ner core webapi举例,

在program中添加以下代码

//注入swagger
builder.Services.AddEndpointsApiExplorer();//生成文档
builder.Services.AddSwaggerGen(c =>//设置文档内容
{
    c.SwaggerDoc("v1", new()
    {
        Title = builder.Environment.ApplicationName,//组名字,右上角可以选择
        Version = "v1",//版本
        Description = $"接口文档说明,放这里 ",
        Contact = new OpenApiContact()
        {
            Name = "zhangsan",//名字
            Email = "xxx@qq.com",//邮箱
            Url = null
        }//通常这里都是放联系,地址的,一般不用
    });
    // xml文档绝对路径,"WebApplication2"为项目名,表示读取该项目的xml文件
    var file = Path.Combine(AppContext.BaseDirectory, "WebApplication1.xml");
    // xml文档绝对路径
    var path = Path.Combine(AppContext.BaseDirectory, file);
    // true : 设置控制器层注释,对控制器中方法的注释的显示
    c.IncludeXmlComments(path, true);
    // 对方法名的名称进行排序,首字母顺序。
    c.OrderActionsBy(o => o.RelativePath);
});

if (app.Environment.IsDevelopment())//只有当程序处于debug的情况才开启swagger
{
    //分别注入中间件和ui中间间
    app.UseSwagger();
    //第一个为路径不能更改,第二个为版本可以更改
    app.UseSwaggerUI(c => c.SwaggerEndpoint(
        "/swagger/v1/swagger.json", $"{builder.Environment.ApplicationName} v1"));
}

和上一个基本一致,注释都在代码中有写,在项目属性中开启“生成包含api文档的文件”,开启方法》右键项目》属性》生成》输出》打开“生成包含api的文档的文件”

然后在项目的nuget包中引用:Swashbuckle.AspNetCore,版本和环境版本一致即可。新建项目时如果选中openapi支持就会自动引用

x

 注入之后就可以正常运行了,但是有一部分会报错,运行了,但是swagger不出现,只有控制台启动了。

有一个可能是,老项目的urls地址可能设置在appsettings.json文件中,如:

这里的urls设定了项目启动之后的指定地址,但是swagger注入是找的Properties文件下的launchSettings.json文件中指定的url地址,导致项目启动时找不到swagger.xml文件,所以不会启动浏览器生成swaggerUI了。(新建项目一般不会出现这个问题)

我们的项目地址应该在这里设置,其中以什么方式运行,这个就是基础了,试一下就知道了,

例如我们 使用默认容器运行,,

 

  在profiles中设置,“launchUrl”应该为“swagger”,“applicationUrl”设置服务启动地址,如“http://localhost:5293”。对应以下》

如果有不足请指正,以上纯属个人经验,这是demo,设置的免费 

https://download.csdn.net/download/qq_53217825/87787509

下载直接运行即可。谢谢

### 集成和配置SwaggerC# ASP.NET Core项目 #### 添加必要的NuGet包 为了使ASP.NET Core WebApi支持Swagger功能,需引入`Swashbuckle.AspNetCore` NuGet包。此操作可以通过Visual Studio的NuGet管理器完成,也可以利用命令行工具执行安装指令。 ```bash dotnet add package Swashbuckle.AspNetCore ``` #### 修改`Program.cs`文件以启用Swagger服务和支持特性 在项目的入口文件`Program.cs`内,应当调整代码结构以便正确加载并初始化Swagger组件。具体做法是在构建应用实例之前向依赖注入容器注册所需的服务,并在之后设置相应的中间件逻辑[^2]。 ```csharp var builder = WebApplication.CreateBuilder(args); // 注册控制器和其他必要服务... builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); // 启用Swagger生成和服务发现能力 builder.Services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" }); }); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(options => options.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1")); } // 应用其他安全性和路由相关配置... app.Run(); ``` #### 利用XML注释提升API文档质量 为了让自动生成的API文档更加详尽易懂,可以在编译选项里开启XML文档输出开关,并告知Swagger读取这些注释信息作为补充说明材料[^4]。 编辑`.csproj`文件加入如下片段: ```xml <PropertyGroup> <GenerateDocumentationFile>true</GenerateDocumentationFile> <NoWarn>$(NoWarn);1591</NoWarn> </PropertyGroup> ``` 随后修改之前的`AddSwaggerGen()`调用来包含对上述生成之XML文件的支持: ```csharp using System.Reflection; using System.IO; // ... string xmlPath = Path.Combine(AppContext.BaseDirectory, $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"); options.IncludeXmlComments(xmlPath); ``` 这样做的好处在于能够自动提取源码中的三斜杠(`///`)风格注释内容至最终呈现给用户的在线帮助页面上。 #### 自定义化Swagger界面展示效果 除了基本的功能外,还可以进一步个性化Swagger UI的表现形式,比如更改主题颜色、隐藏不必要的按钮等。这通常涉及到传递额外参数给`UseSwaggerUI()`方法以及可能的话编写CSS样式表来微调外观细节[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dudke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值