什么是Swagger?

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。使用Swagger能够让我们在线调试接口以及功能测试。现在我把Swagger集成到Asp.Net MVC 中。

具体步骤:

1、用Visual Studio 2017 创建一个Asp.Net Web API 项目

从模板中选择 Web API,这样 VS将把 MVC、与Web API相关的文件夹和核心引用添加到我们的应用中。(一定要选择Web API不然后面没有效果的,这里主要就是在web api 里面实现的)

创建项目后项目文档跟文件夹结构如下

2、用Code First在Model里面创建2张表用来测试,一张用户表Users,一张部门表Dep

创建表之前先引用EF

下面是部门表跟用户表的代码,里面的关系也配置好了

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web; namespace SwaggerDemo.Models
{
/// <summary>
/// 用户表
/// </summary>
[Table("Users")]
public class Users
{
/// <summary>
/// Id
/// </summary>
[Key]
public int Id { get; set; }
/// <summary>
/// 登录账号
/// </summary>
[StringLength(,ErrorMessage ="登录ID不能超过20个字符")]
[Column("LoginID",TypeName ="nvarchar")]
[Display(Name ="登录账号")]
public string LoginID { get; set; }
/// <summary>
/// 密码
/// </summary>
public string Pwd { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string Name { get; set; }
/// <summary>
/// 年龄
/// </summary>
public int Age { get; set; }
/// <summary>
/// 性别
/// </summary>
public string Sex { get; set; }
/// <summary>
/// 部门Id
/// </summary>
[ForeignKey("Dep")]
public int DepId { get; set; }
/// <summary>
/// 部门
/// </summary>
public virtual Dep Dep { get; set; } }
}
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web; namespace SwaggerDemo.Models
{
/// <summary>
/// 部门表
/// </summary>
[Table("Dep")]
public class Dep
{
/// <summary>
/// ID
/// </summary>
[Key]
public int Id { get; set; }
/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 部门编码
/// </summary>
public string DepCode { get; set; }
/// <summary>
/// 介绍
/// </summary>
public string Instroduce { get; set; }
/// <summary>
/// 用户
/// </summary>
public virtual IList<Users> Users { get; set; }
}
}

接下来配置数据库上下文新建一个DbConn继承DbContext

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web; namespace SwaggerDemo.Models
{
/// <summary>
/// 数据库上下文
/// </summary>
public class DBConn:DbContext
{
public DBConn() : base("SqlConn")
{
//默认的初始化器。这种初始化器在第一次运行程序时会创建数据库,再次运行不会再创建新的数据库。但是如果我们改变了领域类,运行程序时会抛出一个异常
Database.SetInitializer(new CreateDatabaseIfNotExists<DBConn>());
}
/// <summary>
/// 用户
/// </summary>
public DbSet<Users> Users { get; set; }
/// <summary>
/// 部门
/// </summary>
public DbSet<Dep> Dep { get; set; }
}
}

配置web.config文件,在configuration节点下面添加

  <!--数据库连接-->
<connectionStrings>
<add name="SqlConn" connectionString="Data Source=数据库地址;Initial Catalog=数据库名;User ID=sa; Password=密码;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
</connectionStrings>

3、在控制器里面新建一个空的Web API 命名Users

在里面填写一个方法查询用户的用来测试

using SwaggerDemo.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http; namespace SwaggerDemo.Controllers
{
/// <summary>
/// 用户操作
/// </summary>
public class UsersController : ApiController
{
private readonly DBConn db = new DBConn();
/// <summary>
/// 获取用户列表
/// </summary>
/// <returns></returns>
public List<UserDto> GetUsersList()
{
var udl = db.Users.ToList();
List<UserDto> list = new List<UserDto>();
foreach (var u in udl)
{
var udt= new UserDto()
{
Id = u.Id,
Name = u.Name,
Age = u.Age,
Pwd = u.Pwd,
Sex = u.Sex
};
}
return list ;
}
/// <summary>
/// 获取用户信息
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public UserDto GetUsers(int id)
{
var user = db.Users.Find(id);
var ud = new UserDto() {
Id=user.Id,
Name= user.Name,
Age= user.Age,
Pwd= user.Pwd,
Sex= user.Sex,
};
return ud;
}
}
}

要用一个Dto去接收不然会出错

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace SwaggerDemo.Models
{
public class UserDto
{
public int Id { get; set; }
/// <summary>
/// 登录账号
/// </summary>
public string LoginID { get; set; }
/// <summary>
/// 密码
/// </summary>
public string Pwd { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string Name { get; set; }
/// <summary>
/// 年龄
/// </summary>
public int Age { get; set; }
/// <summary>
/// 性别
/// </summary>
public string Sex { get; set; }
}
}

现在数据库还没有表的哦,所以先运行一遍把表建立,然后又添加一点数据进去方便测试。看路由里面启动项是Home控制器里面的Index,添加

using SwaggerDemo.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace SwaggerDemo.Controllers
{
public class HomeController : Controller
{
private readonly DBConn db = new DBConn();
public ActionResult Index()
{
var u = db.Users.ToList();
var d = db.Dep.ToList(); return View();
}
}
}

运行没有出错 数据库里面也有了表

那就添加数据

private readonly DBConn db = new DBConn();
public ActionResult Index()
{
AddDep();
AddUsers();
var u = db.Users.ToList();
var d = db.Dep.ToList(); return View();
}
/// <summary>
/// 添加用户
/// </summary>
public void AddUsers()
{
for(int i =;i<;i++)
{
var depId = ;
if(i<){depId = ;}
else{depId = ;}
var user = new Users() {
Id = i + ,
LoginID="Wyy00"+i,
Pwd="mima00"+i,
Name="魏杨杨"+i,
Age=,
Sex="男",
DepId=depId
};
db.Users.Add(user);
db.SaveChanges();
}
}
/// <summary>
/// 添加部门
/// </summary>
public void AddDep()
{
for (int i = ; i < ; i++)
{
var dep = new Dep() {
Id=i+,
Name="部门"+i,
Instroduce="部门介绍00"+i,
DepCode="BM00"+i
};
db.Dep.Add(dep);
db.SaveChanges();
}
}

数据库里面是有值的

 数据添加了记得把那两个方法删除了不然会添加重复数据

4、验证一下Web API 是否可用,我是在谷歌浏览器里面

5、引入Swagger:将Swashbuckle添加到 Web API中

安装成功后APP_Start文件夹下面会多出来一个“SwaggerConfig.cs”配置文档,所有Swagger相关配置都会在此进行设置。

现在简单的配置就可以了,也可以用了 看效果图:在地址看后面加 /Swagger

现在有两个API一个是系统自己创建的Values一个是我们自己创建的Users

里面也可以调用了 点开Users查询用户

下面的响应

6、现在都是英文的,现在来汉化一下并且显示注释,配置一下

首先把SwaggerConfig.cs不要的东西全部删了。强迫症没办法,干干净净看着多好哈哈,再添加一下中文语言js包

别忘了把这个js文件属性生成操作改为嵌入式资源(不然引用不到这个js)这个js网上有没有来我给你

c.InjectJavaScript(thisAssembly, "SwaggerDemo.Scripts.swaggerui.swagger_lang.js");//中文包

读取注释的话配置路径,并且项目生成要有个xml文件:右键点击项目---->属性--->生成   生成xml选项√上

读取xml   :SwaggerDemo这个是项目名别搞乱了

using System.Web.Http;
using WebActivatorEx;
using SwaggerDemo;
using Swashbuckle.Application;
using System; [assembly: PreApplicationStartMethod(typeof(SwaggerConfig), "Register")] namespace SwaggerDemo
{
public class SwaggerConfig
{
public static void Register()
{
var thisAssembly = typeof(SwaggerConfig).Assembly; GlobalConfiguration.Configuration
.EnableSwagger(c =>
{
c.SingleApiVersion("v1", "SwaggerDemo");
c.IncludeXmlComments(GetXmlCommentsPath());
})
.EnableSwaggerUi(c =>
{
c.InjectJavaScript(thisAssembly, "SwaggerDemo.Scripts.swaggerui.swagger_lang.js");//中文包
});
}
private static string GetXmlCommentsPath()
{
return String.Format(@"{0}\bin\SwaggerDemo.XML", System.AppDomain.CurrentDomain.BaseDirectory);
}
}
}

看效果

Asp.Net MVC Web API 中Swagger教程,使用Swagger创建Web API帮助文件的更多相关文章

  1. asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发2-Model层建立

    上篇(asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发1-准备工作)文章讲解了开发过程中的准备工作,主要创建了项目数据库及项目,本文主要讲解项目M层的实现,M层这里 ...

  2. 在ASP.NET MVC应用程序中实现Server.Transfer()类似的功能

    在ASP.NET MVC应用程序中,如果使用Server.Transfer()方法希望将请求转发到其它路径或者Http处理程序进行处理,都会引发“为xxx执行子请求时出错”的HttpException ...

  3. ASP.NET MVC开发学习过程中遇到的细节问题以及注意事项

    1.datagrid中JS函数传值问题: columns: { field: 'TypeName', title: '分类名称', width: 120, sortable: true, format ...

  4. 7.ASP.NET MVC 5.0中的Routing【路由】

    大家好,这一篇向大家介绍ASP.NET MVC路由机制.[PS:上一篇-->6. ASP.NET MVC 5.0中的HTML Helpers[HTML帮助类] ] 路由是一个模式匹配系统,它确保 ...

  5. asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发4- 后台模板html页面创建

    上一篇教程<asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发3-登录模块开发>完成了本项目的登录模块,登录后就需要进入后台管理首页了,需要准备一个后台模 ...

  6. ASP.NET MVC 3: Razor中的@:和语法

    原文 ASP.NET MVC 3: Razor中的@:和语法 [原文发表地址] ASP.NET MVC 3: Razor’s @: and <text> syntax[原文发表时间] De ...

  7. 如何在ASP.NET MVC和EF中使用AngularJS

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) AngularJS作为一个越来越流行的前端框架,在使用ASP.NET MVC和实体框架开发W ...

  8. asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发1-准备工作

    /****** Object: 新闻表 Script Date: 2017/9/2 星期六 15:11:12 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENT ...

  9. 在ASP.NET MVC的Action中直接接受客户端发送过来的HTML内容片段

    出于安全的考虑,默认情况下,如果从客户端发送过来的数据中直接包括了HTML内容,ASP.NET会自动启动保护措施,你会收到下面的错误提示 这当然是一个不错的设计,只不过在某些特殊的事情,如果我们确实需 ...

  10. ASP.NET MVC 4.0中选择Windows 验证默认出错拒绝访问的原因和解决方案

    在VS 2012或者2013 中,根据模板创建一个ASP.NET MVC 4.0的应用程序,选择下面的模板 然后选择Intranet Application 不对源代码做任何修改,直接按下F5调试,会 ...

随机推荐

  1. 【论文阅读】Learning Dual Convolutional Neural Networks for Low-Level Vision

    论文阅读([CVPR2018]Jinshan Pan - Learning Dual Convolutional Neural Networks for Low-Level Vision) 本文针对低 ...

  2. 关于Java运行机制

    目录 编译型语言与解释型语言的区别 编译型语言 解释型语言 细数两者之差别 Java的奇怪之处 Java的编译 Java的解释 具体机制 Java既是编译型语言,也是解释型语言. 首先先查找关于两种语 ...

  3. Paramiko的SSH和SFTP使用

    目录 1. 概述 2. Paramiko的基本使用 2.1 SSHClient关键参数介绍 2.2 SSHClient常用示例 2.2.1 通过用户名和密码方式登陆: 2.2.2 通过用户名和密码方式 ...

  4. 【Android - IPC】之AIDL简介

    参考资料: 1.<Android开发艺术探索>第二章2.4.4 2.Android AIDL Binder框架解析:http://blog.csdn.net/lmj623565791/ar ...

  5. react中将svg做成icon组件在其他模块调用

    开发前端页面,经常会有很多共用的图标icon,那么我们把它单独做成组件,以便后期重复调用! 首先在components 的icons文件夹下创建BaseIcon.js文件. 我们需要先在命令行安装gl ...

  6. 如何切换本地的GIT账号

    如何切换本地的GIT账号 1.为什么登陆第一次Git之后,就不用登陆了呢? 因为电脑已经将你的登陆凭据给保存起来了. 这也正是你不知道如何切换账号的原因. 2.在哪里能看已经保存的登陆凭证呢?并能够切 ...

  7. CSS自定义默认样式

    html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, ...

  8. Linux系统通过FTP进行文档基本操作【华为云分享】

    [摘要] Linux系统里通过FTP可以对文档进行上传,更改权限和基本的文档管理. 获得Linux系统后,不熟悉命令操作的情况下,可以通过FTP工具进行文档操作,下面以WinSCP工具为例进行讲解: ...

  9. 【nodejs原理&源码赏析(5)】net模块与通讯的实现

    [摘要] Node.js net模块的原理及使用 示例代码托管在:http://www.github.com/dashnowords/blogs 一. net模块简介 net模块是nodejs通讯功能 ...

  10. 淘宝适配 flexible.js

    1.引入 阿里cdm文件,也可以自己下载下来引用,不需要在添加<meta name="viewport"">标签了 <script src=" ...