ASP.NET Web API 中使用 swagger 来管理 API 文…
2019-01-01 23:20:20来源:博客园 阅读 ()
本文以 ASP.NET Web API 为后台框架,利用 EF6 连接 postgreSQL 数据库,使用 swagger 来生成 REST APIs文档。文章分二个部分,第一部分主要讲如何用 EF6 连接 postgreSQL,第二部分是介绍如何集成 swagger,如何屏蔽 swagger 默认自带的接口说明。
一、EF6 连接 postgreSQL
(1)使用 NuGet 安装 Npgsql.EntityFramework
在VS的程序包管理控制台输入如下命令
Install-Package Npgsql.EntityFramework
(2)配置 Web.config
利用 NuGet 安装的 EntityFramework,大部分配置都会自动在 Web.config 中生成,但却不会生成 DbProviderFactories,咱们手动把 DbProviderFactories 加上。数据库的连接信息也需要手动配置,在这里一并配置。配置如下:
1 <system.data> 2 <DbProviderFactories> 3 <remove invariant="Npgsql" /> 4 <add name="Npgsql" invariant="Npgsql" description=".Net Framework Data Provider for Postgresql" type="Npgsql.NpgsqlFactory, Npgsql" /> 5 </DbProviderFactories> 6 </system.data> 7 <connectionStrings> 8 <!-- 数据库连接字符串, 包含主机,端口,用户,密码 --> 9 <add name="DbConn" connectionString="Server=localhost;Port=5432;User Id=postgres; Password = postgres; Database=postgres" providerName="Npgsql"/> 10 </connectionStrings>
(3)新建 数据库上下文(DbContext)类
1 // 数据库上下文 DB.cs 2 public class DB : DbContext 3 { 4 public DB() : base("name = DbConn") {} 5 protected override void OnModelCreating(DbModelBuilder modelBuilder) 6 { 7 //设置 EF 的默认schema 8 modelBuilder.HasDefaultSchema("public"); 9 } 10 // 实体类 (demo为表名) 11 public virtual DbSet<demo> demo { get; set; } 12 }
(4)新建实体类 demo
1 public class demo 2 { 3 [Key] 4 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 5 public string id { get; set; } 6 7 [Required] 8 public string name { get; set; } 9 }
(5)改写 ValuesController
1 public List<demo> Get() 2 { 3 using (DB db = new DB()) 4 { 5 return db.demo.ToList(); 6 } 7 }
(7)测试数据连接是否正常
浏览器中输入 http://localhost:46665/api/Values,如果能看到有数据库中的数据返回,表示数据访问正常。
二、集成 swagger
(1)安装 swagger
Install-Package Swashbuckle
(2)配置 xml 生成 路径
选中项目—>右键—>项目属性—>生成—>勾选(XML文档文件)—>保存
(3)查看结果
浏览器中输入 http://localhost:46665/swagger/ui/index
PS:运行中如果出现错误,找到 SwaggerNet 类,注释类上面的两行
// [assembly: WebActivator.PreApplicationStartMethod(typeof(webApi.App_Start.SwaggerNet), "PreStart")]
// [assembly: WebActivator.PostApplicationStartMethod(typeof(webApi.App_Start.SwaggerNet), "PostStart")]
(4)swagger 中显示接口注释信息
1 public class SwaggerConfig 2 { 3 public static void Register() 4 { 5 var thisAssembly = typeof(SwaggerConfig).Assembly; 6 7 GlobalConfiguration.Configuration 8 .EnableSwagger(c =>{ 9 c.SingleApiVersion("v1", "webApi"); 10 //添加XML解析 11 //注意修改相应的XML名字 12 c.IncludeXmlComments(string.Format("{0}/bin/webApi.XML", System.AppDomain.CurrentDomain.BaseDirectory)); 13 }).EnableSwaggerUi(c =>{}); 14 } 15 }
到此,swagger 已经能生成文档了,但这时候生成的文档中会包含 swagger 默认自带的接口,看起来有点别扭。下面介绍下屏蔽 swagger 默认自带的接口。
在 SwaggerConfig 中添加 DocumentFilter。
1 public class SwaggerConfig 2 { 3 public static void Register() 4 { 5 var thisAssembly = typeof(SwaggerConfig).Assembly; 6 7 GlobalConfiguration.Configuration 8 .EnableSwagger(c =>{ 9 c.SingleApiVersion("v1", "webApi"); 10 //添加XML解析 11 //注意修改相应的XML名字 12 c.IncludeXmlComments(string.Format("{0}/bin/webApi.XML", System.AppDomain.CurrentDomain.BaseDirectory)); 13 // 接口过滤 14 c.DocumentFilter<ApiFilter>(); 15 }).EnableSwaggerUi(c =>{}); 16 } 17 }
1 // ApiFilter.cs 2 [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)] 3 public partial class ApiAttribute : Attribute { } 4 public class ApiFilter: IDocumentFilter 5 { 6 public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer) 7 { 8 foreach (ApiDescription apiDescription in apiExplorer.ApiDescriptions) 9 { 10 // url 过滤 11 var _key = "/" + apiDescription.RelativePath.TrimEnd('/'); 12 if (_key.Contains("/api/Swagger") && swaggerDoc.paths.ContainsKey(_key)) 13 swaggerDoc.paths.Remove(_key); 14 } 15 } 16 }
重新运行下,swagger 默认自带的接口已经不见了。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- asp.net源程序编译为dll文件并调用的实现过程 2020-03-29
- Asp.net MVC SignalR来做实时Web聊天实例代码 2020-03-29
- ASP.NET MVC中jQuery与angularjs混合应用传参并绑定数据 2020-03-29
- Asp.Net中WebForm的生命周期 2020-03-29
- ASP.NET使用Ajax返回Json对象的方法 2020-03-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash