本文是根据角落的白板报的《使用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的更多相关文章

  1. .net WebApi中使用swagger生成WepApi集成测试工具

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

  2. ASP.NET Core 3.0 WebApi中使用Swagger生成API文档简介

    参考地址,官网:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/getting-started-with-swashbuckle?view ...

  3. NetCore 3.0 中使用Swagger生成Api说明文档及升级报错原因

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

  4. 如何在spring-boot web项目中启用swagger

    swagger的三个项目及其作用 我们打开swagger的官网,会发现有三个swagger相关的项目,它们分别是 swagger-editor 作用是通过写代码,生成文档描述(一个json文件或其他格 ...

  5. AutoMapper之ABP项目中的使用介绍

    最近在研究ABP项目,昨天写了Castle Windsor常用介绍以及其在ABP项目的应用介绍 欢迎各位拍砖,有关ABP的介绍请看阳光铭睿 博客 AutoMapper只要用来数据转换,在园里已经有很多 ...

  6. [Laravel-Swagger]如何在 Laravel 项目中使用 Swagger

    如何在 Laravel 项目中使用 Swagger http://swagger.io/getting-started/ 安装依赖 swagger-php composer require zirco ...

  7. ABP项目中的使用AutoMapper

    AutoMapper之ABP项目中的使用 最近在研究ABP项目,昨天写了Castle Windsor常用介绍以及其在ABP项目的应用介绍 欢迎各位拍砖,有关ABP的介绍请看阳光铭睿 博客 AutoMa ...

  8. ABP教程-给项目添加SwaggerUI,生成动态webapi

    上一篇,我们是正式将ABP生成的代码项目,跑起来了,然后演示了下多租户的不同.那么这篇我们就来实现下SwaggerUI. Q:SwaggerUI是干什么的呢? A:他是一个能将我们的webapi,通过 ...

  9. Android项目中JNI技术生成并调用.so动态库实现详解

    生成 jni方式有两种:一种是通过SWIG从C++代码生成过度的java代码:另一种是通过javah的方式从java代码自动生成过度的C++代码.两种方式下的步骤流程正好相反. 第一种方式:由于需要配 ...

随机推荐

  1. ExtJS 4.2 组件介绍

    目录 1. 介绍 1.1 说明 1.2 组件分类 1.3 组件名称 1.4 组件结构 2. 组件的创建方式 2.1 Ext.create()创建 2.2 xtype创建 1. 介绍 1.1 说明 Ex ...

  2. InnoDB体系结构学习笔记

    后台线程 Master Thread 核心的后台线程,主要负责将缓冲池的数据异步刷新到磁盘,保证数据的一致性,包括(脏页的刷新).合并插入缓冲.(UNDO页的回收)等 IO Thread 4个writ ...

  3. ASP.NET MVC5+EF6+EasyUI 后台管理系统(66)-MVC WebApi 用户验证 (2)

    系列目录 前言: 回顾上一节,我们利用webapi简单的登录并进行了同域访问与跨域访问来获得Token,您可以跳转到上一节下载代码来一起动手. 继续上一篇的文章,我们接下来演示利用拿到的Token来访 ...

  4. EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解

    前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...

  5. LeetCode[3] Longest Substring Without Repeating Characters

    题目描述 Given a string, find the length of the longest substring without repeating characters. For exam ...

  6. inline-block元素间距问题的几种解决方案

    不知道大家有没有碰到过设置了display:inline-block;的几个相邻元素之间有几px间距的问题,这里提供几种简单实用的解决方法,希望能够帮到大家!   方法1. 将<li>标签 ...

  7. spring源码分析之context

    重点类: 1.ApplicationContext是核心接口,它为一个应用提供了环境配置.当应用在运行时ApplicationContext是只读的,但你可以在该接口的实现中来支持reload功能. ...

  8. 破解SQLServer for Linux预览版的3.5GB内存限制 (UBUNTU篇)

    在上一篇中我提到了如何破解RHEL上SQLServer的内存大小限制,但是Ubuntu上还有一道检查 这篇我将会讲解如何在3.5GB以下内存的Ubuntu中安装和运行SQLServer for Lin ...

  9. Canvas讲解

    1.Canvas是什么? 简单地说canvas是画布,可以进行画任何的线.图形.填充等一系列的操作,而且操作的画图就是js, 提供简单的二维矢量绘图. 2.步骤: <canvas id=&quo ...

  10. css样式之border-image

    border-image-source 属性设置边框的图片的路径[none | <image>] div { border: 20px solid #000; border-image-s ...