在.net core 项目中添加swagger支持
目前有很多项目都用到Swagger,我们讲一下如何在老项目中添加swagger:
- 在.net core 项目中部署:
第一步:首先添加包Swashbuckle.AspNetCore (可通过微软添加包命令Install-Package 包名进行添加,也可以通过管理NuGet程序包进行添加)
第二步:修改launchSettings.json的launchUrl为swagger,即程序启动后进入swagger UI风格页面也可以说Rest风格,如下:
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:54834",
"sslPort": 44359
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Test": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "swagger",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Production"
},
"applicationUrl": "https://localhost:5001;http://localhost:5000"
}
}
}
第三步:在Startup.cs中的方法ConfigureServices方法中添加swagger 相关代码。
/// <summary>
/// 注册服务
/// </summary>
/// <param name="services"></param>
/// <returns></returns>
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddAutoMapper();
TestContext.ConStr = Configuration.GetConnectionString("SqlServer");
RedisHelper.RedisConStr = Configuration["RedisConnection"];
RedisHelper.RedisConId = Configuration["RedisConnectDbId"];
services.AddDbContext<TestContext>(options =>
{
options.UseSqlServer(Configuration.GetConnectionString("SqlServer"),
builder =>
{
builder.EnableRetryOnFailure(
maxRetryCount: 5,
maxRetryDelay: TimeSpan.FromSeconds(30),
errorNumbersToAdd: new int[] { 2 });
});
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1).AddJsonOptions(options =>
{
options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
});
#region Swagger
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Info
{
Version = "v0.1.0",
Title = "Test Swagger",
Description = "框架说明文档",
TermsOfService = "None",
Contact = new Swashbuckle.AspNetCore.Swagger.Contact { Name = "Test.Swagger", Email = "test@net.com", Url = "https://www.facai.com" }
});
//如果不加入以下两个xml 也是可以的 但是不会对api有中文说明,使用了一下两个xml 就需要对成员使用///注释
//本webapi的xml
var basePath = Microsoft.DotNet.PlatformAbstractions.ApplicationEnvironment.ApplicationBasePath;
var xmlPath = Path.Combine(basePath, "Test.xml");//这个就是刚刚配置的xml文件名
c.IncludeXmlComments(xmlPath, true);//默认的第二个参数是false,这个是controller的注释,记得修改
c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
//如果不引用别的类库项目,那么以上就是一个webapi项目添加swagger服务的全部
//webapi引用model的xml
//var xmlModelPath = Path.Combine(basePath, "Learn.Swagger.Model.xml");//这个就是Model层的xml文件名
//c.IncludeXmlComments(xmlPath, true);//默认的第二个参数是false,这个是controller的注释,记得修改
//c.IncludeXmlComments(xmlModelPath);
});
#endregion
}
第四步:在Startup.cs中的方法Configure方法中添加swagger 相关代码。
/// <summary> /// 设置配置选项 /// </summary> /// <param name="app"></param> /// <param name="env"></param> /// <param name="loggerFactory"></param> public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); #region Swagger app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "ApiHelp V1"); }); #endregion } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } }
最后,生成后界面如下:

- 添加Swagger在本地调试是好的,但是发布到IIS上就会出现很多问题,最多的问题是出现404或者502的错误,解决方案参照如下:
发布后项目往往默认为Production环境,将其修改为Development即可解决。
解决方法 打开发布到iis的文件夹下的web.config文件,添加以下代码: <environmentVariables> <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" /> </environmentVariables>
修改后的web.config结构大致如下: <?xml version="1.0" encoding="utf-8"?> <configuration> <location path="." inheritInChildApplications="false"> <system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> </handlers> <aspNetCore processPath="dotnet" arguments="*.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="InProcess"> <environmentVariables> <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" /> </environmentVariables> </aspNetCore> </system.webServer> </location> </configuration> <!--ProjectGuid: 15af0485-b65a-422a-bf12-5877b85abb6c-->

浙公网安备 33010602011771号