zoukankan      html  css  js  c++  java
  • Asp.Net MVC Web API 中Swagger教程,使用Swagger创建Web API帮助文件

       什么是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(20,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 =0;i<11;i++) { var depId = 1; if(i<5){depId = 1;} else{depId = 2;} var user = new Users() { Id = i + 1, LoginID="Wyy00"+i, Pwd="mima00"+i, Name="魏杨杨"+i, Age=18, Sex="", DepId=depId }; db.Users.Add(user); db.SaveChanges(); } } /// <summary> /// 添加部门 /// </summary> public void AddDep() { for (int i = 0; i < 2; i++) { var dep = new Dep() { Id=i+1, 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}inSwaggerDemo.XML", System.AppDomain.CurrentDomain.BaseDirectory);
            }
        }
    }

     看效果

  • 相关阅读:
    Django extra 和 annotate
    剑指offer——26反转链表
    剑指offer——25链表中环的入口节点
    剑指offer——24链表中倒数第k个结点
    剑指offer——23调整数组顺序使奇数位于偶数前面
    剑指offer——22表示数值的字符串
    剑指offer——21正则表达式匹配
    剑指offer——20删除链表中重复的结点
    剑指offer——19删除链表的节点
    剑指offer——18打印从1到最大的n位数
  • 原文地址:https://www.cnblogs.com/w5942066/p/10831381.html
Copyright © 2011-2022 走看看