介绍:

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. 剑指Offer28 最小的K个数(Partition函数应用+大顶堆)

    包含了Partition函数的多种用法 以及大顶堆操作 /*********************************************************************** ...

  2. jQuery选择器之可见性过滤选择器Demo

    测试代码 05-可见性过滤选择器.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &q ...

  3. Python中的内置函数

    2.1 Built-in Functions The Python interpreter has a number of functions built into it that are alway ...

  4. UIToolbar自定义背景及按钮设置

      //1.创建toolbar(MyToolbar继承UIToolbar) _myToolbar = [[MyToolbar alloc]initWithFrame:CGRectMake(kZero, ...

  5. sql分割以逗号隔开的字符串

    --创建存储过程 IF EXISTS (SELECT * FROM sysobjects WHERE name='GetSplitString' AND xtype='p') DROP PROCEDU ...

  6. IOS 支付宝、微信回调传值给H5网页

    这里用是的苹果原生和JS的交互 .有不明白JavaScriptCore框架的可以去网上搜索下这方面的资料很多废话不多说直接上代码 @protocol JSContextDelegate <JSE ...

  7. Table of Contents - Git

    Downloading and  Installing Git Download for Linux and Unix Integration with Eclipse Eclipse 提交工程至 G ...

  8. Android语音识别(本地+第三方)

    语音识别主要的功能就是在用户不方便输入的时候找一个替代输入的选择. 1.本地语音识别 下面的代码首先创建SpeechRecognizer对象,并设置回调函数监听器.当在点击监听器中调用doSpeech ...

  9. Part 97 Performance of a multithreaded program

    class Program { static void Main(string[] args) { Stopwatch s = new Stopwatch(); s.Start(); EvenNumb ...

  10. SQLServer触发器的使用

    创建: create trigger trigger_name on {table_name view_name} {for After Instead of } [ insert, update,d ...