本文以 ASP.NET Web API 为后台框架,利用 EF6 连接 postgreSQL 数据库,使用 swagger 来生成 REST APIs文档。文章分二个部分,第一部分主要讲如何用 EF6 连接 postgreSQL,第二部分是介绍如何集成 swagger,如何屏蔽 swagger 默认自带的接口说明。

一、EF6 连接 postgreSQL

(1)使用 NuGet 安装 Npgsql.EntityFramework

在VS的程序包管理控制台输入如下命令

  1. 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

  1. Install-Package Swashbuckle

(2)配置 xml 生成 路径

  1. 选中项目—>右键—>项目属性—>生成—>勾选(XML文档文件)—>保存

(3)查看结果

浏览器中输入 http://localhost:46665/swagger/ui/index

PS:运行中如果出现错误,找到 SwaggerNet 类,注释类上面的两行

  1. // [assembly: WebActivator.PreApplicationStartMethod(typeof(webApi.App_Start.SwaggerNet), "PreStart")]
  2. // [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. }
  1. 重新运行下,swagger 默认自带的接口已经不见了。

ASP.NET Web API 中使用 swagger 来管理 API 文档的更多相关文章

  1. asp.net mvc5中使用Swagger 自动生成WebApi文档笔记

    Swagger可以自动生成Api说明文档,并内置在线测试,通过NSwagStudio还可以自动生成Api客户端调用代码,以下为具体实现步骤 1.写一个简单的WebApi并加上注释 public cla ...

  2. Asp.Net Core 轻松学-利用 Swagger 自动生成接口文档

    前言     目前市场上主流的开发模式,几乎清一色的前后端分离方式,作为服务端开发人员,我们有义务提供给各个客户端良好的开发文档,以方便对接,减少沟通时间,提高开发效率:对于开发人员来说,编写接口文档 ...

  3. ASP.NET Core Web API中使用Swagger

    本节导航 Swagger介绍 在ASP.NET CORE 中的使用swagger   在软件开发中,管理和测试API是一件重要而富有挑战性的工作.在我之前的文章<研发团队,请管好你的API文档& ...

  4. ASP.NET Web API和ASP.NET Web MVC中使用Ninject

    ASP.NET Web API和ASP.NET Web MVC中使用Ninject 先附上源码下载地址 一.准备工作 1.新建一个名为MvcDemo的空解决方案 2.新建一个名为MvcDemo.Web ...

  5. 在ASP.NET Web Application中通过SOAP协议调用Bing搜索服务

    本文介绍了如何在ASP.NET Web Application中将Bing搜索作为Web Service来使用,并通过HTTP的SOAP协议在ASP.NET Web Application中调用Bin ...

  6. 如何在ASP.NET Web站点中统一页面布局[Creating a Consistent Layout in ASP.NET Web Pages(Razor) Sites]

    如何在ASP.NET Web站点中统一页面布局[Creating a Consistent Layout in ASP.NET Web Pages(Razor) Sites] 一.布局页面介绍[Abo ...

  7. ASP.NET Web Service中使用Session 及 Session丢失解决方法 续

    原文:ASP.NET Web Service中使用Session 及 Session丢失解决方法 续 1.关于Session丢失问题的说明汇总,参考这里 2.在Web Servcie中使用Sessio ...

  8. ASP.NET web.config中数据库连接字符串connectionStrings节的配置方法

    ASP.NET web.config中数据库连接字符串connectionStrings节的配置方法 第一种情况,本地开发时,使用本地数据库,如下面的代码 <connectionStrings& ...

  9. ASP.NET Web网站中App_Code文件夹的作用及使用场景

    原文地址:Web Site项目和ASP.NET Web Application中App_Code文件夹的作用作者:宾的宾 我现在要建一个ASP.NET的网站了,不难吧,开始动手.如下图: 这种方法建立 ...

随机推荐

  1. 关键词提取_tf_idf

    TF-IDF(term frequency-inverse document frequency)-词频-逆文档频率 TF:统计一个词在文档中出现的频次,次数越多,表达能力越强 IDF:统计一个词在文 ...

  2. NServiceBus消息重播

    https://docs.particular.net/tutorials/message-replay/ 链接:https://pan.baidu.com/s/1KdWvpfZYZ2wUivkt3B ...

  3. Mac虚拟机

    2018-06-21 需要的Mac静像是ios或是cdr的,如果是dmg,可以参考这个转换http://blog.sina.com.cn/s/blog_60b45f230101kkbf.html 或  ...

  4. R.java的生成规则

    0x7f010000 开头的是attr 0x7f050000 开头的是anim 0x7f0b0002 开头的是bool 0x7f020000 开头的是drawable 0x7f060000 开头的是i ...

  5. Eclipse编辑XML自动提示(zz)

    Eclipse编辑XML自动提示 博客分类: j2se XMLEclipseiBATISSpringSQL  IED Eclipse Java EE IDE for Web Developers: D ...

  6. 用EventLog Analyzer的预定义报表和告警来进行Syslog管理

    用EventLog Analyzer的预定义报表和告警来进行Syslog管理 系统日志(Syslog)管理是几乎所有企业的重要需求.系统管理员将syslog看作是解决网络上系统日志支持的系统和设备性能 ...

  7. ant Design和ant Design mobile的使用,并实现按需加载

    1.全局安装yarn npm install -g create-react-app yarn 2.创建react项目,并用yarn start 运行 3.引入antd/引入antd-mobile y ...

  8. Jquery 的ajax里边不能识别$(this)

    确实不能用,在ajax外面弄个变量$this= $(this),然后在里面用就行了 在jQuery使用ajax后$(this)失效,原因很简单,$(this)指向的是最近调用它的jquery对象,即$ ...

  9. C++ cout

    cout.flush() cout.put() 输出一个字符 char* p = "hello"; cout.write(p,sttrlen(q)-3) 输出字符串,能够选定长度. ...

  10. CentOS 7 / RHEL 7 运行单用户模式进行root的密码重置

    步骤一,开机时随便按下键盘,进入以下菜单 步骤二: 选择第一项,按e键进行修改 步骤三,定位到 ro(  linux 16 or linuxefi  ) 步骤四:把ro改成 “rw init=/sys ...