介绍:

Swagger-Ui是一个非常棒的Web API说明帮助页,具体详情可自行Google和百度。

官网:http://swagger.io/    GitHub地址:https://github.com/swagger-api/swagger-ui

使用:

Swagger-Ui是一个用纯前端语言开发的项目,所有强大的功能全靠JS实现。为了能在.Net的Web API项目中使用,我们借用domaindrivendev开发的Swashbuckle进行配置。配置方法如下:

1、在Nuget中安装Swashbuckle,它会依赖安装Swashbuckle.Core。安装完成之后,会在你的App_Start目录下增加SwaggerConfig.cs文件。

2、右键你的Web API项目,选择属性,然后点击生成。勾选XML文档文件。上面输出路径自己选好。这是我的配置方式

3、在SwaggerConfig.cs文件中,取消c.IncludeXmlComments(GetXmlCommentsPath());的注释,并为该方法写代码,其实就是查找第二部生成的XML文件

4、在你项目的合适位置(如:Views\Shared\_Layout.cshtm)增加访问路径

5、运行起你的Web API项目,点击Swagger。你就可以看到Swagger页面了。  还是非常简单易用的。

那么问题来了:

既然Swagger-Ui是一个纯前端语言开发的工具,那我想自定义一下它,应该很容易吧。事实呢,的确很容易(深坑)。

我们有两种方法:

第一种:去Swagger-Ui官方网站,下载最新的源代码,自己配置。 反正也就是读取你生成的Json文件,这里就不多说了,因为我不会。

第二种:我们既然用的是domaindrivendev开发的Swashbuckle而且这个也是开源的(深坑),我们下下来源码,自己编译一下,修改修改就可以了,结果这个坑我就跳了。

废话不多说了,当时的情况是源码下下来,各种看不懂,不管他,直接替换掉Nuget的Swashbuckle.Core引用,然后运行起来,发现缺失了一堆堆JS、CSS文件。但是在源代码中却根本没发现那些缺失的文件,吭哧吭哧找了好久。猜想以为是通过网络获取,但偏偏在在Chorme中调试,发现全是本地文件。最后各种无果。

只好去反编译一下Nuget下下来的包,掏出.NET程序员的神器ILSpy。发现在下下来的dll文件中,缺失的文件全在资源里面,如图

突然豁然开朗,原来是额外有资源文件,那我们就加进去吧。

但是结果发现,我根本不能按照反编译的那样,按照一定的路径和格式添加那些文件!!!不信你自己可以试试,看看加进去的资源文件是什么样的方式和路径。

尝试了N种方法之后,依然无果。只好去求助,最后在iFish的指引下,发现了这个....

好吧,问题到这里算是解决了。

在项目的csproj文件中,作者配置了资源文件的导入。但是却在发布代码的时候,忘了把Swagger-Ui的代码加进去,而且还是用这种这么冷门的方法导入的资源文件。  真是无力吐槽。   不过也算是学到了新的东西(坑)。

---------------------------------------------------------------

2017-04-25更新,这种方式在netcore中简直太常见了。。

---------------------------------------------------------------

最后稍微修改了一下,把Swagger-Ui集成到Swashbuckle.Core中,小修改如下

 <!-- Automatically embed swagger-ui files. Construct name so resource can be retrieved by swagger-ui relative path -->
<ItemGroup>
<EmbeddedResource Include="swagger-ui\dist\**\*.*">
<LogicalName>%(RecursiveDir)%(FileName)%(Extension)</LogicalName>
<InProject>false</InProject>
</EmbeddedResource>
</ItemGroup>

问题解决!剩下的就是前端的工作了,自己自定义一下。比如汉化,官方自带语言包,引用一下两个JS文件即可:

   <!--汉化翻译-->
<script src='lang/translator-js' type='text/javascript'></script>
<script src='lang/zh-cn-js' type='text/javascript'></script>

学习过程中查找的资料:

Swagger项目主页 :  https://github.com/swagger-api/swagger-ui

Swashbuckle 项目主页: https://github.com/domaindrivendev/Swashbuckle


这三个是国内有人研究分享的文章 :

 
https://github.com/helei112g/swagger-ui

http://www.cnblogs.com/Flyear/p/4870373.html

http://www.cnblogs.com/yxlblogs/p/4075932.html

在Web API中使用Swagger-UI开源组件(一个深坑的解决)的更多相关文章

  1. ASP.NET Core Web API中使用Swagger

    本节导航 Swagger介绍 在ASP.NET CORE 中的使用swagger   在软件开发中,管理和测试API是一件重要而富有挑战性的工作.在我之前的文章<研发团队,请管好你的API文档& ...

  2. Asp.Net Web Api中使用Swagger

    关于swagger 设计是API开发的基础.Swagger使API设计变得轻而易举,为开发人员.架构师和产品所有者提供了易于使用的工具. 官方网址:https://swagger.io/solutio ...

  3. ASP.NET Web API 中使用 swagger 来管理 API 文档

    本文以 ASP.NET Web API 为后台框架,利用 EF6 连接 postgreSQL 数据库,使用 swagger 来生成 REST APIs文档.文章分二个部分,第一部分主要讲如何用 EF6 ...

  4. 在ASP.NET Core Web API上使用Swagger提供API文档

    我在开发自己的博客系统(http://daxnet.me)时,给自己的RESTful服务增加了基于Swagger的API文档功能.当设置IISExpress的默认启动路由到Swagger的API文档页 ...

  5. Core Web API上使用Swagger提供API文档

    在ASP.NET Core Web API上使用Swagger提供API文档   我在开发自己的博客系统(http://daxnet.me)时,给自己的RESTful服务增加了基于Swagger的AP ...

  6. C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志

    C#实现多级子目录Zip压缩解压实例 参考 https://blog.csdn.net/lki_suidongdong/article/details/20942977 重点: 实现多级子目录的压缩, ...

  7. Asp.Net MVC Web API 中Swagger教程,使用Swagger创建Web API帮助文件

    什么是Swagger? Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法 ...

  8. Asp.Net Core 3.1 学习3、Web Api 中基于JWT的token验证及Swagger使用

    1.初始JWT 1.1.JWT原理 JWT(JSON Web Token)是目前最流行的跨域身份验证解决方案,他的优势就在于服务器不用存token便于分布式开发,给APP提供数据用于前后端分离的项目. ...

  9. 在Abp中集成Swagger UI功能

    在Abp中集成Swagger UI功能 1.安装Swashbuckle.Core包 通过NuGet将Swashbuckle.Core包安装到WebApi项目(或Web项目)中. 2.为WebApi方法 ...

随机推荐

  1. Bootstrap,导航栏点击效果修复(补)

    前言: 昨天晚上休息,忘记发博客了.对于学习这件是,还是需要坚持的.想想自建一个Jekyll博客模版还是很兴奋的,话不多说,看正文吧! 关于开发:  先看个Demo吧,点这里.你会发现,点击是没有效果 ...

  2. css奇特用法之 IMG添加背景图片配合显示--效果惊艳

    IMG标签本身是显示图片的,但通过CSS可以再为其设置背景图片,让其和自身的图片配合来显示,最终的效果会让你惊叹.当然,这个发现来自于老外,所以代码马上与大家分享.再此之前,我也从来没有想到过这个思路 ...

  3. JavaScript--基本包装类型(13)

    // JS为了便于操作基本类型,提供了3个特殊的引用类型:Boolean/Number和String; 一 基本包装类型概述 // 实际上,每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装 ...

  4. MySQL防注入[待续]

    1.将输入的参数变成整数 $id = isset[$_GET['tid']]?$_GET['tid']+0:0; 可以防止:"*.php?tid=3 or 1"这样的语句.

  5. IIS Session问题解决

    Windows Server 2008 +IIS +ASP.net +SQLServer2008搭建的内部WEB系统. 发现用户Session总是不知不觉就自行遗失,原因就是 IIS的不稳定性将导致S ...

  6. AspxGridView ComboBoxComlum列数据联动

    第1步: 页面放置AspxGridView控件, 设置列ComboBox1, ComboBox2列, 拟通过ComboBox1列更新联动ComboBox2列. 两个数据列均为"ComboBo ...

  7. js标签放在html的什么位置比较好

    推荐的是js的script标签放在body的末尾,</body>标签之前,包含在body内! <body> <!--其它Html标签--> <script&g ...

  8. IOS中调整UI控件位置和尺寸

    1.frame(修改位置和尺寸):以父控件左上角为坐标原点,在其父控件中的位置和尺寸. //frame属性中的坐标点不能直接修改 CGRect tempFrame = self.v.frame; // ...

  9. Objective-C设计模式——抽象工厂模式Abstract Factory(对象创建)

    抽象工厂模式 理解了工厂方法模式,其实抽象工厂和工厂方法模式有很多的相似之处.抽象工厂同样是分离客户端对象的创建和逻辑代码的,但是抽象工厂往往是产生一组数据而不单单是产生一个产品. 抽象工厂提供一个创 ...

  10. 【学习笔记】【C语言】变量的内存分析

    计算机中的内存是以字节为单位的存储空间.内存的每一个字节都有一个唯一的编号,这个编号就称为地址.就好像酒店是以房间为单位的,每个房间都有一个唯一的房号,我们根据房号就能找到对应的房间. 1. 变量的存 ...