在Web API中使用Swagger-UI开源组件(一个深坑的解决)
介绍:
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>
学习过程中查找的资料:
Swashbuckle 项目主页: https://github.com/domaindrivendev/Swashbuckle

这三个是国内有人研究分享的文章 :
http://www.cnblogs.com/Flyear/p/4870373.html
http://www.cnblogs.com/yxlblogs/p/4075932.html
在Web API中使用Swagger-UI开源组件(一个深坑的解决)的更多相关文章
- ASP.NET Core Web API中使用Swagger
本节导航 Swagger介绍 在ASP.NET CORE 中的使用swagger 在软件开发中,管理和测试API是一件重要而富有挑战性的工作.在我之前的文章<研发团队,请管好你的API文档& ...
- Asp.Net Web Api中使用Swagger
关于swagger 设计是API开发的基础.Swagger使API设计变得轻而易举,为开发人员.架构师和产品所有者提供了易于使用的工具. 官方网址:https://swagger.io/solutio ...
- ASP.NET Web API 中使用 swagger 来管理 API 文档
本文以 ASP.NET Web API 为后台框架,利用 EF6 连接 postgreSQL 数据库,使用 swagger 来生成 REST APIs文档.文章分二个部分,第一部分主要讲如何用 EF6 ...
- 在ASP.NET Core Web API上使用Swagger提供API文档
我在开发自己的博客系统(http://daxnet.me)时,给自己的RESTful服务增加了基于Swagger的API文档功能.当设置IISExpress的默认启动路由到Swagger的API文档页 ...
- Core Web API上使用Swagger提供API文档
在ASP.NET Core Web API上使用Swagger提供API文档 我在开发自己的博客系统(http://daxnet.me)时,给自己的RESTful服务增加了基于Swagger的AP ...
- 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 重点: 实现多级子目录的压缩, ...
- Asp.Net MVC Web API 中Swagger教程,使用Swagger创建Web API帮助文件
什么是Swagger? Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法 ...
- Asp.Net Core 3.1 学习3、Web Api 中基于JWT的token验证及Swagger使用
1.初始JWT 1.1.JWT原理 JWT(JSON Web Token)是目前最流行的跨域身份验证解决方案,他的优势就在于服务器不用存token便于分布式开发,给APP提供数据用于前后端分离的项目. ...
- 在Abp中集成Swagger UI功能
在Abp中集成Swagger UI功能 1.安装Swashbuckle.Core包 通过NuGet将Swashbuckle.Core包安装到WebApi项目(或Web项目)中. 2.为WebApi方法 ...
随机推荐
- asp双表查询
sql="select sum(***) as ** from ** as a,** as b where a.id=b.id" Rs(A.id) Rs(B.id) [提示.双表中 ...
- php操作mysql总结
01 <?php02 $dbhost='localhost';03 $dbuser='root';04 $dbpass='123456';05 $dbname='pro ...
- 零基础Android学习笔记-01 安卓开发环境搭建
安卓开发环境搭建. 1.首先准备JDK,从官网找到JDK下载地址,原来做.NET不熟悉JAVA,干脆用最新的,下载了JDK 1.7的版本.原来装过1.5还要配置环境变量什么的.但1.7好像很给力,装好 ...
- Cocos2d-x场景切换相关函数介绍
场景切换是通过导演类Director实现的,其中的相关函数如下: runWithScene(Scene* scene).该函数可以运行场景.只能在启动第一个场景时候调用该函数.如果已经有一个场景运行情 ...
- C语言清除输入缓存方法记录[转]
原文:http://www.tomytime.com/archives/218/ fflush()函数是标准的作法. setbuf(stdin,NULL)是GCC下可用的一种方法. scanf(&qu ...
- java静态代码块、初始化块和构造方法的执行顺序
分析:当执行new Child()时,它首先去看父类里面有没有静态代码块,如果有,它先去执行父类里面静态代码块里面的内容,当父类的静态代码块里面的内容执行完毕之后,接着去执行子类(自己这个类)里面的静 ...
- node笔记——gulp-imagemin图片压缩
出处:http://blog.csdn.net/kkgege/article/details/49929983 之前用项目用gulp进行前端的构建,用到压缩图片插件gulp-imagemin, 后来发 ...
- 在hibernate中使用c3p0数据源
1. jar包 hibernate-release-4.1.8.Final\lib\optional\c3p0 2. 加入配置: <!-- 数据库连接池最大连接数 --> &l ...
- template_12特化与重载
1,重载函数模板f<int*>((int*)pi);//1f<int>((int*)pi);//2上面用int*替换第一个模板的T,用int来替换第二个模板的T.那么将得到两个 ...
- GCD Block
GCD (Grand Central Dispatch) 是Apple公司开发的一种技术,它旨在优化多核环境中的并发操作并取代传统多线程的编程模式. 在Mac OS X 10.6和IOS 4.0之后开 ...