net WebApi中使用swagger

摘要:
NetWebApi使用swagger。当我在WebApi中使用swagger时,我发现了很多问题。我找了很多地方都找不到解决这个问题的彻底办法。我以后自己解决这个问题。我希望这对遇到同样问题的朋友有帮助。我将首先一步一步地演示如何解决swagger在项目中遇到的问题。首先,让我们创建一个API项目。上面的图1、图2、图3、图4和图1-4都表明,默认生成的页面看起来不太好,测试也不方便。接下来,我们将介绍如何使用swagger。使用nuget包获取Swashble和Swagger包并安装它们。图5和图6通常安装到并且应正常工作。
net WebApi中使用swagger

我在WebApi中使用swagger的时候发现会出现很多问题,搜索很多地方都没找到完全解决问题的方法,后面自己解决了,希望对于遇到同样问题朋友有帮助。我将先一步一步的演示项目中解决swagger遇到问题及解决方法。

  首先我们新建一个api项目

net WebApi中使用swagger第1张

图1 (默认生成项目)

net WebApi中使用swagger第2张

图2(运行首页)

 net WebApi中使用swagger第3张

图3(默认Api列表)

net WebApi中使用swagger第4张

图4(默认Get的Api)

 以上图1-4都是默认情况下生成页面看起来不是那么好看,而且测试也不方便,下面将介绍怎么使用swagger。

   使用nuget包获取Swashbule、swagger的包并安装。

net WebApi中使用swagger第5张

图5(Swashbule - swagger for Api)

net WebApi中使用swagger第6张

图6(swagger UI for net)

一般安装到就应该可以正常运行了。但是运行后我们发现抛出异常

net WebApi中使用swagger第7张

图7(异常1)

打开解决方案属性-->生成,勾选XML文档文件,保存就ok。

net WebApi中使用swagger第8张

图8

net WebApi中使用swagger第9张

图9(异常2)

出现该异常是由于没有增加依赖项,大家可以自行查看自己的dll文件版本,做出修改,把下面的代码插入到web.config中。

1
2
3
4
5
6
7
8
9
10
11
12
<dependentAssembly>
    <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
  </dependentAssembly>

在把swagger.net中两行代码注释,估计是因为nuget包中的代码没有更新导致这个异常出现

net WebApi中使用swagger第10张

图10(注释不需要代码)

好了现在我们来看看可以运行后的效果,在浏览器中输入URL:http://localhost:28129/swagger会自动跳转到http://localhost:28129/swagger/ui/index

net WebApi中使用swagger第11张

图11

至此我们就能够正常运行swagger非常方便调试接口。

为了方便测试我们新建一个App的Model

复制代码
    /// <summary>
    /// App信息
    /// </summary>
    public class App
    {
        /// <summary>
        /// App的ID号
        /// </summary>
        public int Id { get; set; }
        /// <summary>
        /// App的名称
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// App的说明
        /// </summary>
        public string Remark { get; set; }
    }
复制代码

返回消息ResultJson的Model

复制代码
    /// <summary>
    /// 返回处理结果
    /// </summary>
    public class ResultJson
    {
        /// <summary>
        /// 返回代码
        /// </summary>
        public int Code { get; set; }
        /// <summary>
        /// 返回消息
        /// </summary>
        public string Message { get; set; }
    }
复制代码

新增加一个AppController的Api

复制代码
 public class AppController : ApiController
    {
        private List<App> GetApps()
        {
            List<App> list = new List<App>();
            list.Add(new App() { Id = 1, Name = "WeChat", Remark = "WeChat" });
            list.Add(new App() { Id = 2, Name = "FaceBook", Remark = "FaceBook" });
            list.Add(new App() { Id = 3, Name = "Google", Remark = "Google" });
            list.Add(new App() { Id = 4, Name = "QQ", Remark = "QQ" });
            return list;
        }

        /// <summary>
        /// 获取所有APP
        /// </summary>
        /// <returns>所有APP集合</returns>
        [HttpGet]
        public HttpResponseMessage Get()
        {
            return MyJson.ObjectToJson(GetApps());
        }

        /// <summary>
        /// 获取指定APP
        /// </summary>
        /// <param name="id">需要获取APP的id</param>
        /// <returns>返回指定APP</returns>
        [HttpGet]
        public HttpResponseMessage Get(int id)
        {
            var app = GetApps().Where(m => m.Id.Equals(id)).FirstOrDefault();
            return MyJson.ObjectToJson(app);
        }

        /// <summary>
        /// 增加App信息
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        [HttpPost]
        public HttpResponseMessage Insert([FromBody]App value)
        {
            ResultJson json = new ResultJson() { Code = 200, Message = "Ok" };
            return MyJson.ObjectToJson(json);
        }

        /// <summary>
        /// 更新APP信息
        /// </summary>
        /// <param name="value">APP信息</param>
        /// <returns>更新结果</returns>
        [HttpPut]
        public HttpResponseMessage UpdateApp([FromBody]App value)
        {
            ResultJson json = new ResultJson() { Code = 200, Message = "Ok" };
            return MyJson.ObjectToJson(json);
        }

        /// <summary>
        /// 删除APP信息
        /// </summary>
        /// <param name="id">APP编号</param>
        /// <returns>删除结果</returns>
        [HttpDelete]
        public HttpResponseMessage DeleteApp(int id)
        {
            ResultJson json = new ResultJson() { Code = 200, Message = "Ok" };
            return MyJson.ObjectToJson(json);
        }
    }
复制代码

为了满足使用中需要用到Json格式数据,提出一个类

复制代码
    public class MyJson
    {
        public static HttpResponseMessage ObjectToJson(object obj)
        {
            JavaScriptSerializer js = new JavaScriptSerializer();
            string r = js.Serialize(obj);
            var result = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StringContent(r, Encoding.UTF8, "text/json")
            };
            return result;
        }
        public static HttpResponseMessage ObjectToJson(List<object> objs)
        {
            JavaScriptSerializer js = new JavaScriptSerializer();
            string r = js.Serialize(objs);
            var result = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StringContent(r, Encoding.UTF8, "text/json")
            };
            return result;
        }
    }
复制代码

好了我们运行后可以看看效果

net WebApi中使用swagger第20张

图12

点击 Try it out

net WebApi中使用swagger第21张

图13

我们还可以将注释打开,我们就可以在页面里面看到注释,方便调试接口时候调用人了解各参数信息。打开

复制代码
public class SwaggerConfig
{
    public static void Register()
     {
            var thisAssembly = typeof(SwaggerConfig).Assembly;

            GlobalConfiguration.Configuration 
                .EnableSwagger(c =>
                    {
                        c.SingleApiVersion("v1", "SwaggerApiDemo");
                        c.IncludeXmlComments(GetXmlCommentsPath());
                    })
                .EnableSwaggerUi(c =>
                    {                    
            });
        }        
        private static string GetXmlCommentsPath()
        {
            return string.Format("{0}/bin/SwaggerApiDemo.XML", System.AppDomain.CurrentDomain.BaseDirectory);
        }
}
复制代码

上面标记颜色为新增加内容,好了我们来看看最终效果

net WebApi中使用swagger第24张

图14

net WebApi中使用swagger第25张

图15

我们可以看到注释部分了,这样我们的swagger就完成了。

我把最终的代码发到此处,有需要代码的时候朋友可以直接下载。

http://pan.baidu.com/s/1mhFVZ4W

 
 
标签: swaggerwebapiC#

免责声明:文章转载自《net WebApi中使用swagger》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇NPOI操作EXCEL----------NPOI基础01python-django rest framework框架之解析器下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Item2 + zsh

转自http://11ten.gitcafe.io/book-a/iTerm2/index.html iTerm2的主要特点: 开源免费。 兼容性比默认Terminal更好。对于经常要远程使用的情况下,默认的Terminal在使用vi时经常出现不兼容的问题,而iTerm2在这方面显然做的更好。 快捷键丰富。⌘ + 数字: 切换标签页。⌘ + 方向键按方向...

使用360对app安全进行加固

在写了第一个app之后,打算上架到各个渠道看看,无意间看到了360的app加固工具 http://jiagu.360.cn/ 自己体验了一把,加固过程很傻瓜化, 加固好了之后,还要对app进行二次签名, 最终app体积略微增加了160KB 我们知道app的逆向编译,主要是针对dex进行操作, 查看了加固后的结果,发现dex体积减小了,然后多了Lib目录;猜...

linux之bash shell

GNU bash ======================================================== 通常计算机硬件是由运算器、控制器、存储器、输入/输出设备等等这些物理设备共同组成的,而能够让机箱内各种硬件设备各司其职的东西就叫做系统内核。Linux系统的内核负责驱动硬件、管理活动和分配/管理硬件资源等等任务,如此说来系统内...

用 c# 来操作WORD的经验总结

最近在做一个程序,需要在程序中对Word内容做些处理。从网上查了很多资料,发现,许多都是重复的。更有许多知识,根本没有讲到。为了以后使用方便。将所有的这些知识,加以总结,以备后来人使用。 1、引用     需要引用 COM库:Microsoft word 11.0 Object Library. 不同的版本,会有不同的版本号。    如 2010版Offi...

利用xlwings批量打开同一文件夹下的N多EXCEL表格

批量找开同一文件夹下的N多excel表格会用到两个模块,OS和xlwings。OS是对文件夹的操作。xlwings是对excel的调用。 import osimport xlwings as xwfile_path = '/Users/hugua/Desktop/python_practise'file_list = os.listdir(file_pat...

Eclipse超级完美汉化教程

转自:http://jingyan.baidu.com/article/e75057f28401a8ebc91a899e.html 是中国人都喜欢汉化的东西,除非你想挑战英文,抑或你就是英语高手。百度一下eclipse中文版,眼花缭乱,不知道哪个才是。于是随便下载一个,不幸运的话,不是病毒就是英文版的,或者是“残缺版”的,让人煞费苦心。好吧,教大家一个纯...