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的网站了,不难吧,开始动手.如下图: 这种方法建立 ...
随机推荐
- redis在游戏服务器中的使用初探(三) 信息存储
摘要: 搭建了服务器环境 有了客户端 我们来假想下以下应用场景:我们简单举个实例来描述下Hash的应用场景,比如我们要存储一个用户信息对象数据,包含以下信息:用户ID,为查找的key,存储的value ...
- mysql Error_code: 1593
mysql slave_IO_running no 查看data目录下的.err文件提示:mysql Error_code: 1593 解决方法: 1.检查 data目录下auto.cnf 文件中 ...
- IOS初级:UIAlertController
- (IBAction)signOutAction:(id)sender { //初始化,StyleActionSheet是对话框的样式 UIAlertController *alert = [UIA ...
- PHP字符串替换函数
str_replace函数 描述:实现字符串替换,区分大小写 语法:mixed str_replace(mixed $search, mixed replace, mixed $subject, [i ...
- java web 实现文件夹上传(保留目录结构)
今天我弄了一下文件夹上传(很简单的 首先,我们的html需要这样写 <form action="/file/upload" enctype="multipart/f ...
- linux上搭建solr(用jetty部署)
环境搭建:centos7及solr7版本 描述:最新版本的solr内置了jetty容器,可以支持jetty部署,从而不需要发布到tomcat下面 首先同样先在/usr/local/mypackage上 ...
- 从点到面,给Button的属性动画
属性动画是API 11加进来的一个新特性,其实在现在来说也没什么新的了.属性动画可以对任意view的属性做动画,实现动画的原理就是在给定的时间内把属性从一个值变为另一个值.因此可以说属性动画什么都可以 ...
- Swift: 用UserDefaults保存复杂对象
一直木有看过这个细节,用UserDefaults是能不能存复杂一点的对象.大家可能都看到过UserDefaults的一个方法setObject: forKey:,用这个方法存过NSDictionary ...
- picker
滚动选择器,现支持三种选择器,通过mode来区分,分别是普通选择器,时间选择器,日期选择器,默认是普通选择器. 普通选择器:mode = selector 属性名 类型 默认值 说明 range Ar ...
- 【python】Python 中的 classmethod 和 staticmethod
Python 中的 classmethod 和 staticmethod 有什么具体用途? 推荐地址:http://www.cnblogs.com/wangyongsong/p/6750454.htm ...