ABP项目中使用Swagger生成动态WebAPI
本文是根据角落的白板报的《使用ABP实现SwaggerUI,生成动态webapi》一文的学习总结,感谢原文作者角落的白板报。
1 安装Swashbuckle.core
1.1 选择WebApi项目,右键“管理NuGet程序包”。

1.2 输入 “Swashbuckle.core”,搜索。选择Swashbuckle.core,右边点击安装。

2 配置Swashbuckle
2.1 打开WebApi项目中的DemoWebApiModule.cs文件。创建ConfigureSwaggerUI()方法,并在Initialize()中调用。
public void ConfigureSwaggerUI()
{
Configuration.Modules.AbpWebApi().HttpConfiguration
.EnableSwagger(c =>
{
c.SingleApiVersion("v1", "DemoAPI文档");
c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
})
.EnableSwaggerUi();
}
public override void Initialize()
{
IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
Configuration.Modules.AbpWebApi().DynamicApiControllerBuilder
.ForAll<IApplicationService>(typeof(DemoApplicationModule).Assembly, "app")
.Build();
Configuration.Modules.AbpWebApi().HttpConfiguration.Filters.Add(new HostAuthenticationFilter("Bearer"));
ConfigureSwaggerUI();
}
2.2 运行项目。
运行项目,打开地址“/swagger/ui/index”,即可查看WebApi。

3 增强WebApi文档
3.1 打开Application项目的属性设置,勾选“XML文档文件”。

3.2 将application层中的注释添加到SwaggerUI中。
public void ConfigureSwaggerUI()
{
Configuration.Modules.AbpWebApi().HttpConfiguration
.EnableSwagger(c =>
{
c.SingleApiVersion("v1", "DemoAPI文档");
c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
//将application层中的注释添加到SwaggerUI中
var baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
var commentsFileName = "Bin//Demo.Application.xml";
var commentsFile = Path.Combine(baseDirectory, commentsFileName);
//将注释的XML文档添加到SwaggerUI中
c.IncludeXmlComments(commentsFile);
})
.EnableSwaggerUi();
}
3.3 在API接口方法中添加注释后,SwaggerUI就会显示对应的注释信息。以Role为例,添加注释如下:
UpdateRolePermissionsInput.cs
/// <summary>
/// 修改角色权限信息接收的DTO
/// </summary>
public class UpdateRolePermissionsInput
{
/// <summary>
/// 角色ID
/// </summary>
[Range(, int.MaxValue)]
public int RoleId { get; set; }
/// <summary>
/// 获取权限名称列表
/// </summary>
[Required]
public List<string> GrantedPermissionNames { get; set; }
}
IRoleAppService.cs
/// <summary>
/// 角色信息接口
/// </summary>
public interface IRoleAppService : IApplicationService
{
/// <summary>
/// 修改角色的权限信息
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task UpdateRolePermissions(UpdateRolePermissionsInput input);
}
3.4 再次运行项目,可以看到WebApi文档出现了注释信息。

4 修改访问方式
4.1 使用EnableSwaggerUi的重载方法。
SwaggerUI默认使用的是EnableSwaggerUi()方法,访问路径默认为“/swagger/ui/index/”。 F12转到定义,我们可以看到EnableSwaggerUi有一个重载方法。
public void EnableSwaggerUi(Action<SwaggerUiConfig> configure = null); public void EnableSwaggerUi(string routeTemplate, Action<SwaggerUiConfig> configure = null);
ConfigureSwaggerUI中更改EnableSwaggerUi()为:
EnableSwaggerUi("apis/{*assetPath}");
4.2 更改后的访问路径变为"apis/index",运行程序,查看。

5 界面优化
5.1 调整界面CSS样式
(1)新建style.css样式文件,可以自定义文件名。

(2)style.css中编辑样式脚本,以下为示例:
.swagger-section #header {
background-color: #ff6a00;
padding: 14px;
}
(3)style.css文件属性设置为“嵌入的资源”。 非常重要!!!

(4)修改ConfigureSwaggerUI方法。
EnableSwaggerUi("apis/{*assetPath}", c=>
{
c.InjectStylesheet(Assembly.GetExecutingAssembly(),
"Demo.SwaggerUI.css.style.css");
});
其中,Demo为项目命名空间,Demo以后的为文件夹或文件。
(5)预览效果,可以看到header背景色由默认的绿色改为了橙色。

5.2 汉化
操作与5.1相似。
(1)新建swagger.js文件,可以自定义文件名。

(2)编辑swagger.js。
$(function () {
$("#logo").text("Demo");
$("#logo").attr("href", "http://www.Demo.com");
$("#explore").text("查询");
$(".options .toggleEndpointList").each(function () {
$(this).text("展开/隐藏");
});
$(".options .collapseResource").each(function () {
$(this).text("显示资源列表");
});
$(".options .expandResource").each(function () {
$(this).text("显示资源明细");
});
$(".operations .description-link").each(function () {
$(this).text("实体模型");
});
$(".operations .snippet-link").each(function () {
$(this).text("实体类型");
});
$(".operations .response-content-type label").each(function () {
$(this).text("请求方式");
});
$(".operations .sandbox h4").each(function () {
$(this).text("参数列表");
});
$(".operations .response_hider").each(function () {
$(this).text("隐藏响应界面");
});
$(".operations .response .curl").each(function () {
$(this).text("请求头");
});
$(".operations .response .curl").each(function () {
$(this).next().text("请求路径");
});
$(".response_body").each(function () {
$(this).prev().text("响应正文");
});
$("[class='block response_code']").each(function () {
$(this).prev().text("响应代码");
});
$("[class='block response_headers']").each(function () {
$(this).prev().text("响应标头");
});
$(".parameter-content-type div label").each(function () {
$(this).text("参数的内容类型︰");
});
$("small.notice").each(function () {
$(this).text("单击要设置为参数值");
});
$(".body-textarea").each(function () {
var op = $(this).attr("placeholder");
if (op === "(required)") {
$(this).attr("placeholder", "(不可为空)");
}
});
$(".body-textarea required");
$(".fullwidth thead tr th").each(function () {
var key = $(this).text();
switch (key) {
case "Parameter":
$(this).text("参数名");
break;
case "Value":
$(this).text("参数值");
break;
case "Description":
$(this).text("描述");
break;
case "Parameter Type":
$(this).text("参数类型");
break;
case "Data Type":
$(this).text("数据类型");
break;
default:
break;
}
});
$("input[type='submit']").val("测试");
})
其中,logo换成了文字“Demo”,logo的链接换成了“http://www.Demo.com”。可根据实际修改。
(3)swagger.js文件属性设置为“嵌入的资源”。

(4)修改ConfigureSwaggerUI方法。
EnableSwaggerUi("apis/{*assetPath}", c=>
{
c.InjectStylesheet(Assembly.GetExecutingAssembly(),
"Demo.SwaggerUI.css.style.css");
c.InjectJavaScript(Assembly.GetExecutingAssembly(),
"Demo.SwaggerUI.script.swagger.js");
});
其中,Demo为项目命名空间,Demo以后的为文件夹或文件。
(5)预览效果。

后记:
在整个过程中,我遇到的问题是,css文件和js文件设置未生效。琢磨了很久,根本原因是未设置文件属性为“嵌入的资源”!牢记这一步!
本节源码链接:http://pan.baidu.com/s/1nuZHJvz 密码:a0tu
ABP项目中使用Swagger生成动态WebAPI的更多相关文章
- .net WebApi中使用swagger生成WepApi集成测试工具
我在WebApi中使用swagger的时候发现会出现很多问题,搜索很多地方都没找到完全解决问题的方法,后面自己解决了,希望对于遇到同样问题朋友有帮助.我将先一步一步的演示项目中解决swagger遇到问 ...
- ASP.NET Core 3.0 WebApi中使用Swagger生成API文档简介
参考地址,官网:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/getting-started-with-swashbuckle?view ...
- NetCore 3.0 中使用Swagger生成Api说明文档及升级报错原因
认识Swagger Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法,参 ...
- 如何在spring-boot web项目中启用swagger
swagger的三个项目及其作用 我们打开swagger的官网,会发现有三个swagger相关的项目,它们分别是 swagger-editor 作用是通过写代码,生成文档描述(一个json文件或其他格 ...
- AutoMapper之ABP项目中的使用介绍
最近在研究ABP项目,昨天写了Castle Windsor常用介绍以及其在ABP项目的应用介绍 欢迎各位拍砖,有关ABP的介绍请看阳光铭睿 博客 AutoMapper只要用来数据转换,在园里已经有很多 ...
- [Laravel-Swagger]如何在 Laravel 项目中使用 Swagger
如何在 Laravel 项目中使用 Swagger http://swagger.io/getting-started/ 安装依赖 swagger-php composer require zirco ...
- ABP项目中的使用AutoMapper
AutoMapper之ABP项目中的使用 最近在研究ABP项目,昨天写了Castle Windsor常用介绍以及其在ABP项目的应用介绍 欢迎各位拍砖,有关ABP的介绍请看阳光铭睿 博客 AutoMa ...
- ABP教程-给项目添加SwaggerUI,生成动态webapi
上一篇,我们是正式将ABP生成的代码项目,跑起来了,然后演示了下多租户的不同.那么这篇我们就来实现下SwaggerUI. Q:SwaggerUI是干什么的呢? A:他是一个能将我们的webapi,通过 ...
- Android项目中JNI技术生成并调用.so动态库实现详解
生成 jni方式有两种:一种是通过SWIG从C++代码生成过度的java代码:另一种是通过javah的方式从java代码自动生成过度的C++代码.两种方式下的步骤流程正好相反. 第一种方式:由于需要配 ...
随机推荐
- Vue.js 和 MVVM 小细节
MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这使得ViewModel 的状态改变可以自 ...
- angular实现统一的消息服务
后台API返回的消息怎么显示更优雅,怎么处理才更简洁?看看这个效果怎么样? 自定义指令和服务实现 自定义指令和服务实现消息自动显示在页面的顶部,3秒之后消失 1. 显示消息 这种显示消息的方式是不是有 ...
- HTTP常用状态码分析
不管是面试还是工作中,经常会碰到需要通过HTTP状态码去判断问题的情况,比如对于后台RD,给到前端FE的一个接口,出现502或者504 error错误,FE就会说接口存在问题,如果没有知识储备,那就只 ...
- android通过webview调起支付宝app支付
webview在加载网页的时候会默认调起手机自带的浏览器加载网页,用户体验不好.但当用户设置浏览器客户端(setWebViewClient)设置这样的监听事件之后,当请求url的时候就不会打开手机自带 ...
- iOS逆向工程之Theos
如果你对iOS逆向工程有所了解,那么你对Tweak并不陌生.那么由Tweak我们又会引出Theos, 那么什么是Theos呢,简单一句话,Theos是一个越狱开发工具包,Theos是越狱开发工具的首先 ...
- CRL快速开发框架系列教程三(更新数据)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- 2016/12/28_javascript
今天学习的主要内容: javascript: 1.if语句,switch语句,while循环以及for循环: 1)if语句 if(boolean){}; if(boolean){} else if(b ...
- Java企业实训 - 01 - Java前奏
前言: 虽然个人专攻.NET方向,不过由于个人是干教育行业的,方方面面的东西,不能说都必须精通,但肯定多少都会涉及到. 一个菜鸟学员,从啥都不会,经过一步步学习,最后到企业上手掌管一个模块甚至一个项目 ...
- 利用AOP写2PC框架(二)
AOP的底层已经封装好了以后,我们就要开始针对应用层写具体的业务逻辑了. 也就是说我们需要有个类继承于AopProxyBase,并且重写其After,Bofore以达到我们的拦截记录的功能.代码如下: ...
- Javascript之匿名函数
分析: 1.所谓匿名函数,从字面意思理解,就是没有名字的函数,js 用()来代替(注意,是英文状态下的括号) 2.定义形式: function (){ //to add codes that you ...