记录日期: 2019-9-22 23:12:39

原文链接:https://www.cnblogs.com/Qbit/p/11569906.html

集成记录:

npm install nswag --save-dev

复制  NSwag\src\NSwag.CodeGeneration.TypeScript\Templates 目录下的所有文件到 ts 项目的 nswag 目录下,nswag 源码下载困难,人肉拷贝吧 https://github.com/RicoSuter/NSwag/tree/master/src/NSwag.CodeGeneration.TypeScript/Templates

修改 service.config.nswag 中的 templateDirectory 为: "templateDirectory": "./Templates",

至此,可以随意调整复制过来的 liquid 模板,比如增加clientBaseClass 的引用  我的 完整配置如下:

{"runtime": "Default","defaultVariables": null,"documentGenerator": {"fromDocument": {"json": "","url": "http://localhost:21021/swagger/v1/swagger.json","output": null}},"codeGenerators": {"openApiToTypeScriptClient": {"className": "{controller}ServiceProxy","moduleName": "","namespace": "","typeScriptVersion": 2.7,"template": "Axios","promiseType": "Promise","httpClass": "HttpClient","useSingletonProvider": false,"injectionTokenType": "InjectionToken","rxJsVersion": 6.0,"dateTimeType": "Date","nullValue": "Null","generateClientClasses": true,"generateClientInterfaces": false,"generateOptionalParameters": false,"exportTypes": true,"wrapDtoExceptions": false,"exceptionClass": "ApiException","clientBaseClass": "AbpServiceBase","wrapResponses": false,"wrapResponseMethods": [],"generateResponseClasses": true,"responseClass": "SwaggerResponse","protectedMethods": [],"configurationClass": null,"useTransformOptionsMethod": false,"useTransformResultMethod": true,"generateDtoTypes": true,"operationGenerationMode": "MultipleClientsFromPathSegments","markOptionalProperties": false,"generateCloneMethod": false,"typeStyle": "Class","classTypes": [],"extendedClasses": [],"extensionCode": "","generateDefaultValues": true,"excludedTypeNames": [],"excludedParameterNames": [],"handleReferences": true,"generateConstructorInterface": false,"convertConstructorInterfaceData": true,"importRequiredTypes": true,"useGetBaseUrlMethod": false,"baseUrlTokenName": "API_BASE_URL","queryNullValue": "","inlineNamedDictionaries": false,"inlineNamedAny": false,"templateDirectory": "./Templates","typeNameGeneratorType": null,"propertyNameGeneratorType": null,"enumNameGeneratorType": null,"serviceHost": null,"serviceSchemes": null,"output": "../src/api/abp-service-proxies.ts"}}
}

ABP 的swagger 必须使用这种方式获取data.result

修改 Client.ProcessResponse.ReadBodyStart.liquid

{% elseif Framework.IsAxios -%}
const _responseText = response.data.result;    
或者你不去修改模板,使用 我的配置,然后继承这个类,去除注释代码
import { AxiosResponse } from "axios";export class AbpServiceBase {protected transformResult(url: string, response: AxiosResponse, processor: (response: AxiosResponse) => Promise<any>): Promise<any> {// if(response.data.result){ //     response.data=response.data.result;// }console.log(response) return processor(response);}
}

  

修改 File.liquid 文件,在48行增加 :

import { AbpServiceBase } from './abp-service-base';
在项目的 packge.json scripts 中增加:
"genApi":"cd nswag &.\\refresh.bat"
这样可以不用每次输入代码执行生成
调试记录: 特么的。。跑不起来依赖版本要全部安装或者改别尝试了,后续直接人肉跟踪吧,跳过此节

NSwag 中大量使用 启动新进程的方式调用代码,调试起来比较麻烦,在此记录

断点位置:NSwag.Commands.dll!NSwag.Commands.NSwagDocument.ExecuteCommandLineAsync.AnonymousMethod__0() 行 128
在 C:\projects\nswag\src\NSwag.Commands\NSwagDocument.cs(128)

本机已安装 nswagStuido 
断点位置启动进程信息:
路径:"C:\\Program Files (x86)\\Rico Suter\\NSwagStudio\\Win/nswag.exe"
GetArgumentsPrefix()  输出  “”
断点信息:

> NSwag.Commands.dll!NSwag.Commands.NSwagDocument.StartCommandLineProcessAsync(string command) 行 258 C#

参数:run "C:\Users\hyzx8\AppData\Local\Temp\nswag_document_1a466f99-7edb-4012-9450-30e5bc3d7133_config.json"
执行后输出 结果
 
使用 LSpy 打开:"C:\\Program Files (x86)\\Rico Suter\\NSwagStudio\\Win/nswag.exe
找到main 函数
  Console.Write("NSwag command line tool for .NET 4.6.1+ " + RuntimeUtilities.CurrentRuntime + ", ");return new NSwagCommandProcessor(new ConsoleHost()).Process(args);

回到源代码,搜索:NSwag command line tool for .NET 4.6.1+

打开 NSwag.Console 项目,跟踪到 NSwagCommandProcessor  类的 Process(string[] args) 方法

跟踪到:OpenApiToCSharpControllerCommand.RunAsync()  加上断点

进入 C:\Program Files (x86)\Rico Suter\NSwagStudio\Win

Shift 右键打开powershell  输入 .\NSwag.exe run "C:\Users\hyzx8\source\repos\hyzx86\vue-typescript-admin-template\nswag\service.config.nswag"

先不要执行,此时使用vs附加到该 Powershell 的进程

转载于:https://www.cnblogs.com/Qbit/p/11569906.html

ABP 集成 nswag 根据 Swagger API 自动生成操作类代码相关推荐

  1. idea 集成mybatis,利用MyBatis Generator自动生成实体类、mapper文件

    最近一个老项目集成mybatis,利用 generator自动生成实体类.mapper的时候折腾了一小时,记录一下,避免以后再折腾 很简单的三步 https://gitee.com/shunangua ...

  2. php写实体类,自动生成实体类(方式一)

    YMP框架自v1.0开始就支持通过数据库表结构自动生成实体类代码,所以v2.0版本不但重构了实体代码生成器,而且更简单好用! #------------------------------------ ...

  3. 使用 API 自动生成工具优化前端工作流

    文章目录 1. 使用Api管理平台导出swagger.json文件 2. 使用swagger.json导入easy-mock 3. 使用easy-mock-cli生成js格式Api 在工作中,我们的前 ...

  4. [快速入门]Spring Boot+springfox-swagger2 之RESTful API自动生成和测试

    Swagger是自动生成 REST APIs文档的工具之一.Swagger支持jax-rs, restlet, jersey.springfox-swagger是Spring生态的Swagger解决方 ...

  5. html5自动生成图片,HTML5拖放API如何实现自动生成相框功能 HTML5拖放API实现自动生成相框功能代码...

    HTML5拖放API如何实现自动生成相框功能?下面小编给大家分享一下HTML5拖放API实现自动生成相框功能代码,代码很详细,小编觉得挺不错的,有需要的小伙伴们可以来看看. 实现功能: 将桌面图片拖入 ...

  6. 基于OpenAPI Specification自动生成Android客户端代码

    OpenAPI Specification(OAS) 无论你从事前端开发还是后端开发,或多或少都听说过Swagger. Swagger Specification 是一种 API Specificat ...

  7. quicktype游戏java程序_使用QuickType工具从json自动生成类型声明代码

    一.QuickType 工具功能简介 QuickType 是一款可以根据 json 文本生成指定语言(如 Type Script,C++,,Java,C#,Go 等)类型声明代码的工具. 例如我们在写 ...

  8. mysql 自动生成mapper_自动生成实体类、Mapper、Mapper.xml文件

    自动生成实体类.Mapper.Mapper.xml文件 搭建Spring Boot + Mysql + MyBatis 项目 核心 配置pom.xml 创建表 配置文件 生成文件 结果 项目结构 搭建 ...

  9. java实体类没有映射文件_MyBatis自动生成实体类、DAO和XML映射文件,并去掉实体类中的getter和setter方法...

    今天花了3个多小时搞定了这个事情,写个Blog记录一下,先看一下最终生成的实体类吧. packagecom.mybatis.pojo;importlombok.AllArgsConstructor;i ...

  10. 自动生成实体类、Mapper、Mapper.xml文件

    自动生成实体类.Mapper.Mapper.xml文件 搭建Spring Boot + Mysql + MyBatis 项目 核心 配置pom.xml 创建表 配置文件 生成文件 结果 项目结构 搭建 ...

最新文章

  1. poj3320Jessica's Reading Problem—尺取法(java)
  2. Python异常及处理方法总结
  3. 如何攻克目标检测?百度全球顶级会议双料冠军团队有话说!
  4. FZU Monthly-201903 获奖名单
  5. MyBatis 缓存详解-一级缓存(本地缓存)介绍
  6. 一文教你使用java开发一款推箱子游戏
  7. android+button+不可点击置灰,android:tint 给imagebutton着色 按钮灰色
  8. c# 日期函数[string.Format----GetDateTimeFormats] --转载
  9. 网络诈骗是大数据的“原罪”吗
  10. c语言酒店管理系统,C语言酒店管理系统.pdf
  11. 寒门难出贵子,我当程序员让爸妈在老家长脸了
  12. 操作系统是介于计算机硬件和用户之间的接口,计算机操作系统知识盘点
  13. 【集合论】集合概念与关系 ( 集合表示 | 数集合 | 集合关系 | 包含 | 相等 | 集合关系性质 )
  14. 计算机设计大赛软件应用开发作品,2019年(第12届)中国大学生计算机设计大赛软件应用与开发类总决赛报道...
  15. 利用机器学习算法挖掘群控网络黑产设备
  16. 日本房产泡沫的崩塌,虽然很长,希望80后仔细阅读
  17. 顶点、 图元、片元、像素的含义
  18. kettle效率提升
  19. 使用NSIS制作多版本Revit插件(Revit二次开发)
  20. bat批处理定时重启应用程序

热门文章

  1. 阿里的easyexcel
  2. python元组排序_python元组怎么排序
  3. java 字符串拼接_不能用 + 拼接字符串? 这次我要吊打面试官!
  4. celery java_Celery(分布式任务队列) 的使用方法总结
  5. 目标检测的数据增强 -- 代码实现
  6. RPC框架dubbo架构原理及使用说明
  7. 用脆弱性评估流程击败黑客
  8. C++对象模型——关于对象(第一章)
  9. INADDR_ANY的确切含义
  10. Spring+Mybatis+SpringMVC后台与前台分页展示实例(附工程)(转)