.net Core WebApi中使用Swagger生成API文档简介
Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。
总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法、参数和模型紧密集成到服务器端的代码,允许 API 来始终保持同步。Swagger 让部署管理和使用功能强大的 API 从未如此简单。
1、添加并配置Swagger中间件
1.1 按照以下方式添加SwaggerGen 和SwaggerUI对应的NuGet Packages程序包 ,添加引用SwaggerGen 程序包。


1.2 添加 SwaggerUI程序包。

2、配置
2.1 在Startup.cs 类添加命名空间: using Microsoft.OpenApi.Models;
ConfigureServices 方法中添加配置
1 public void ConfigureServices(IServiceCollection services) 2 { 3 services.Configure<IISServerOptions>(options => 4 { 5 options.MaxRequestBodySize = int.MaxValue; 6 }); 7 8 //:使用Swagger 9 services.AddSwaggerGen(options => 10 { 11 options.SwaggerDoc("v1", new OpenApiInfo { Title = "接口文档", Version = "v1" }); 12 // 解决相同类名会报错的问题 13 options.CustomSchemaIds(type => type.FullName); 14 //为Swagger的JSON和UI设置XML注释 15 var basePath = AppContext.BaseDirectory; 16 var xmlPath = Path.Combine(basePath, "NetCoreWebApi.xml"); 17 options.IncludeXmlComments(xmlPath, true); 18 19 }); 20 21 services.AddControllers(options => 22 //全局异常过滤器 23 options.Filters.Add<RequestFilterAttribute>() 24 25 ); 26 }
2.2 配置Configure属性:在Configure方法中,启动中间件为生成的JSON文档和Swagger UI提供服务
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.InjectJavascript("/swagger/ui/zh_CN.js");
c.SwaggerEndpoint("/swagger/v1/swagger.json", "接口文档");
});
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
//将日志记录到数据库
NLog.LogManager.LoadConfiguration("nlog.config").GetCurrentClassLogger();
//指定数据库连接
NLog.LogManager.Configuration.Variables["connectionString"] = Configuration.GetConnectionString("OFCSDBConStr");
//避免日志中的中文输出乱码
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
//:路由配置
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
3、配置项目属性

4、配置文档Url地址

接口代码
1 /// <summary> 2 /// 获取人员信息 3 /// </summary> 4 /// <param name="request"></param> 5 /// <returns></returns> 6 [HttpPost] 7 public ActionResult QuerySysMembersInformation(ElearningSysMembersRequestModel request) 8 { 9 string guid = Guid.NewGuid().ToString(); 10 try 11 { 12 var List = new ElearningSysMembersRequestModel { UserName = "Aek Ampimai", HRID = "01800023", Dept = "CBS" }; 13 return new JsonResult(List); 14 } 15 catch (Exception ex) 16 { 17 throw ex; 18 19 } 20 finally 21 { 22 23 } 24 }
5、运行代码,显示swagger接口文档地址

6、通过swagger测试接口

接口返回结果如下图所示:

补充:如下所示:实际开发过程遇到接口文档不显示,提示Failed to load API definition. Fetch error
解决方案: 1、控制器方法未标注请求类型 【HttpGet】、【HttpPost】、【HttpPut】
Fetch error
2、swagger在本地可以正常访问,但是部署到IIS服务器之后,提示404 Fetch error

原因:本地运行和部署到服务器后,文件路径发生变化,所以找不到指定路径
修改:判断当前运行环境是本地运行还是部署后的环境,如果是部署后的环境文件路径 BICWebAPI ------->部署文件夹名称


浙公网安备 33010602011771号