异世缘 冷帝冰后,花呗提现温州富承婚车队,阳江房地产
本文以 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 默认自带的接口已经不见了。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
asp.net搭建博客,使用BlogEngine.NET+MySql搭建博客
网友评论