ASP.NET Web API 中使用 swagger 来管理 API 文档
本文以 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 加上。数据库的连接信息也需要手动配置,在这里一并配置。配置如下:
- <system.data>
- <DbProviderFactories>
- <remove invariant="Npgsql" />
- <add name="Npgsql" invariant="Npgsql" description=".Net Framework Data Provider for Postgresql" type="Npgsql.NpgsqlFactory, Npgsql" />
- </DbProviderFactories>
- </system.data>
- <connectionStrings>
- <!-- 数据库连接字符串, 包含主机,端口,用户,密码 -->
- <add name="DbConn" connectionString="Server=localhost;Port=5432;User Id=postgres; Password = postgres; Database=postgres" providerName="Npgsql"/>
- </connectionStrings>
(3)新建 数据库上下文(DbContext)类
- // 数据库上下文 DB.cs
- public class DB : DbContext
- {
- public DB() : base("name = DbConn") {}
- protected override void OnModelCreating(DbModelBuilder modelBuilder)
- {
- //设置 EF 的默认schema
- modelBuilder.HasDefaultSchema("public");
- }
- // 实体类 (demo为表名)
- public virtual DbSet<demo> demo { get; set; }
- }
(4)新建实体类 demo
- public class demo
- {
- [Key]
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public string id { get; set; }
- [Required]
- public string name { get; set; }
- }
(5)改写 ValuesController
- public List<demo> Get()
- {
- using (DB db = new DB())
- {
- return db.demo.ToList();
- }
- }
(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 中显示接口注释信息
- public class SwaggerConfig
- {
- public static void Register()
- {
- var thisAssembly = typeof(SwaggerConfig).Assembly;
- GlobalConfiguration.Configuration
- .EnableSwagger(c =>{
- c.SingleApiVersion("v1", "webApi");
- //添加XML解析
- //注意修改相应的XML名字
- c.IncludeXmlComments(string.Format("{0}/bin/webApi.XML", System.AppDomain.CurrentDomain.BaseDirectory));
- }).EnableSwaggerUi(c =>{});
- }
- }
到此,swagger 已经能生成文档了,但这时候生成的文档中会包含 swagger 默认自带的接口,看起来有点别扭。下面介绍下屏蔽 swagger 默认自带的接口。
在 SwaggerConfig 中添加 DocumentFilter。
- public class SwaggerConfig
- {
- public static void Register()
- {
- var thisAssembly = typeof(SwaggerConfig).Assembly;
- GlobalConfiguration.Configuration
- .EnableSwagger(c =>{
- c.SingleApiVersion("v1", "webApi");
- //添加XML解析
- //注意修改相应的XML名字
- c.IncludeXmlComments(string.Format("{0}/bin/webApi.XML", System.AppDomain.CurrentDomain.BaseDirectory));
- // 接口过滤
- c.DocumentFilter<ApiFilter>();
- }).EnableSwaggerUi(c =>{});
- }
- }
- // ApiFilter.cs
- [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
- public partial class ApiAttribute : Attribute { }
- public class ApiFilter: IDocumentFilter
- {
- public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer)
- {
- foreach (ApiDescription apiDescription in apiExplorer.ApiDescriptions)
- {
- // url 过滤
- var _key = "/" + apiDescription.RelativePath.TrimEnd('/');
- if (_key.Contains("/api/Swagger") && swaggerDoc.paths.ContainsKey(_key))
- swaggerDoc.paths.Remove(_key);
- }
- }
- }
- 重新运行下,swagger 默认自带的接口已经不见了。
ASP.NET Web API 中使用 swagger 来管理 API 文档的更多相关文章
- asp.net mvc5中使用Swagger 自动生成WebApi文档笔记
Swagger可以自动生成Api说明文档,并内置在线测试,通过NSwagStudio还可以自动生成Api客户端调用代码,以下为具体实现步骤 1.写一个简单的WebApi并加上注释 public cla ...
- Asp.Net Core 轻松学-利用 Swagger 自动生成接口文档
前言 目前市场上主流的开发模式,几乎清一色的前后端分离方式,作为服务端开发人员,我们有义务提供给各个客户端良好的开发文档,以方便对接,减少沟通时间,提高开发效率:对于开发人员来说,编写接口文档 ...
- ASP.NET Core Web API中使用Swagger
本节导航 Swagger介绍 在ASP.NET CORE 中的使用swagger 在软件开发中,管理和测试API是一件重要而富有挑战性的工作.在我之前的文章<研发团队,请管好你的API文档& ...
- ASP.NET Web API和ASP.NET Web MVC中使用Ninject
ASP.NET Web API和ASP.NET Web MVC中使用Ninject 先附上源码下载地址 一.准备工作 1.新建一个名为MvcDemo的空解决方案 2.新建一个名为MvcDemo.Web ...
- 在ASP.NET Web Application中通过SOAP协议调用Bing搜索服务
本文介绍了如何在ASP.NET Web Application中将Bing搜索作为Web Service来使用,并通过HTTP的SOAP协议在ASP.NET Web Application中调用Bin ...
- 如何在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 ...
- ASP.NET Web Service中使用Session 及 Session丢失解决方法 续
原文:ASP.NET Web Service中使用Session 及 Session丢失解决方法 续 1.关于Session丢失问题的说明汇总,参考这里 2.在Web Servcie中使用Sessio ...
- ASP.NET web.config中数据库连接字符串connectionStrings节的配置方法
ASP.NET web.config中数据库连接字符串connectionStrings节的配置方法 第一种情况,本地开发时,使用本地数据库,如下面的代码 <connectionStrings& ...
- ASP.NET Web网站中App_Code文件夹的作用及使用场景
原文地址:Web Site项目和ASP.NET Web Application中App_Code文件夹的作用作者:宾的宾 我现在要建一个ASP.NET的网站了,不难吧,开始动手.如下图: 这种方法建立 ...
随机推荐
- 关键词提取_tf_idf
TF-IDF(term frequency-inverse document frequency)-词频-逆文档频率 TF:统计一个词在文档中出现的频次,次数越多,表达能力越强 IDF:统计一个词在文 ...
- NServiceBus消息重播
https://docs.particular.net/tutorials/message-replay/ 链接:https://pan.baidu.com/s/1KdWvpfZYZ2wUivkt3B ...
- Mac虚拟机
2018-06-21 需要的Mac静像是ios或是cdr的,如果是dmg,可以参考这个转换http://blog.sina.com.cn/s/blog_60b45f230101kkbf.html 或 ...
- R.java的生成规则
0x7f010000 开头的是attr 0x7f050000 开头的是anim 0x7f0b0002 开头的是bool 0x7f020000 开头的是drawable 0x7f060000 开头的是i ...
- Eclipse编辑XML自动提示(zz)
Eclipse编辑XML自动提示 博客分类: j2se XMLEclipseiBATISSpringSQL IED Eclipse Java EE IDE for Web Developers: D ...
- 用EventLog Analyzer的预定义报表和告警来进行Syslog管理
用EventLog Analyzer的预定义报表和告警来进行Syslog管理 系统日志(Syslog)管理是几乎所有企业的重要需求.系统管理员将syslog看作是解决网络上系统日志支持的系统和设备性能 ...
- ant Design和ant Design mobile的使用,并实现按需加载
1.全局安装yarn npm install -g create-react-app yarn 2.创建react项目,并用yarn start 运行 3.引入antd/引入antd-mobile y ...
- Jquery 的ajax里边不能识别$(this)
确实不能用,在ajax外面弄个变量$this= $(this),然后在里面用就行了 在jQuery使用ajax后$(this)失效,原因很简单,$(this)指向的是最近调用它的jquery对象,即$ ...
- C++ cout
cout.flush() cout.put() 输出一个字符 char* p = "hello"; cout.write(p,sttrlen(q)-3) 输出字符串,能够选定长度. ...
- CentOS 7 / RHEL 7 运行单用户模式进行root的密码重置
步骤一,开机时随便按下键盘,进入以下菜单 步骤二: 选择第一项,按e键进行修改 步骤三,定位到 ro( linux 16 or linuxefi ) 步骤四:把ro改成 “rw init=/sys ...