zoukankan      html  css  js  c++  java
  • Swagger 实践 <二>

    1. 新建.netCore WebApi 项目(选择Angular)。按照上一篇的加上Swage 文档,使http://localhost:11934/swagger/v1/swagger.json 可以访问。

    2.新建 一个文件夹nswag,里面有3个文件

    1.     refresh.bat   :  ".. ode_modules.bin swag" run
    2.    service.config.nswag,注意修改地址
      {
        "runtime": "Default",
        "swaggerGenerator": {
          "fromSwagger": {
            "url": "http://localhost:11934/swagger/v1/swagger.json",
            "output": null
          }
        },
        "codeGenerators": {
          "swaggerToTypeScriptClient": {
            "className": "{controller}ServiceProxy",
            "moduleName": "",
            "namespace": "",
            "typeScriptVersion": 2.0,
            "template": "Angular",
            "promiseType": "Promise",
            "httpClass": "HttpClient",
            "useSingletonProvider": false,
            "injectionTokenType": "InjectionToken",
            "rxJsVersion": 6.0,
            "dateTimeType": "OffsetMomentJS",
            "nullValue": "Undefined",
            "generateClientClasses": true,
            "generateClientInterfaces": false,
            "generateOptionalParameters": false,
            "wrapDtoExceptions": false,
            "wrapResponses": false,
            "generateResponseClasses": true,
            "responseClass": "SwaggerResponse",
            "useTransformOptionsMethod": false,
            "useTransformResultMethod": false,
            "generateDtoTypes": true,
            "operationGenerationMode": "MultipleClientsFromPathSegments",
            "markOptionalProperties": false,
            "generateCloneMethod": true,
            "typeStyle": "Class",
            "extensionCode": "service.extensions.ts",
            "generateDefaultValues": true,
            "excludedTypeNames": [],
            "handleReferences": false,
            "generateConstructorInterface": true,
            "convertConstructorInterfaceData": false,
            "importRequiredTypes": true,
            "useGetBaseUrlMethod": false,
            "baseUrlTokenName": "API_BASE_URL",
            "queryNullValue": "",
            "output": "../src/shared/service-proxies/service-proxies.ts"
          },
          "swaggerToCSharpClient": {
            "generateClientClasses": true,
            "generateClientInterfaces": false,
            "generateDtoTypes": true,
            "injectHttpClient": false,
            "disposeHttpClient": true,
            "generateExceptionClasses": true,
            "exceptionClass": "SwaggerException",
            "wrapDtoExceptions": true,
            "useHttpClientCreationMethod": false,
            "httpClientType": "System.Net.Http.HttpClient",
            "useHttpRequestMessageCreationMethod": false,
            "useBaseUrl": true,
            "generateBaseUrlProperty": true,
            "generateSyncMethods": false,
            "exposeJsonSerializerSettings": false,
            "clientClassAccessModifier": "public",
            "typeAccessModifier": "public",
            "generateContractsOutput": false,
            "parameterDateTimeFormat": "s",
            "generateUpdateJsonSerializerSettingsMethod": true,
            "serializeTypeInformation": false,
            "queryNullValue": "",
            "className": "{controller}Client",
            "operationGenerationMode": "MultipleClientsFromOperationId",
            "generateOptionalParameters": false,
            "generateJsonMethods": true,
            "parameterArrayType": "System.Collections.Generic.IEnumerable",
            "parameterDictionaryType": "System.Collections.Generic.IDictionary",
            "responseArrayType": "System.Collections.ObjectModel.ObservableCollection",
            "responseDictionaryType": "System.Collections.Generic.Dictionary",
            "wrapResponses": false,
            "generateResponseClasses": true,
            "responseClass": "SwaggerResponse",
            "namespace": "MyNamespace",
            "requiredPropertiesMustBeDefined": true,
            "dateType": "System.DateTime",
            "dateTimeType": "System.DateTime",
            "timeType": "System.TimeSpan",
            "timeSpanType": "System.TimeSpan",
            "arrayType": "System.Collections.ObjectModel.ObservableCollection",
            "dictionaryType": "System.Collections.Generic.Dictionary",
            "arrayBaseType": "System.Collections.ObjectModel.ObservableCollection",
            "dictionaryBaseType": "System.Collections.Generic.Dictionary",
            "classStyle": "Inpc",
            "generateDefaultValues": true,
            "generateDataAnnotations": true,
            "excludedTypeNames": [],
            "handleReferences": false,
            "generateImmutableArrayProperties": false,
            "generateImmutableDictionaryProperties": false,
            "output": null
          },
          "swaggerToCSharpController": {
            "controllerStyle": "Partial",
            "useCancellationToken": false,
            "aspNetNamespace": "System.Web.Http",
            "className": "{controller}",
            "operationGenerationMode": "MultipleClientsFromOperationId",
            "additionalNamespaceUsages": [
              "System.Web.Http"
            ],
            "generateOptionalParameters": false,
            "generateJsonMethods": true,
            "parameterArrayType": "System.Collections.Generic.IEnumerable",
            "parameterDictionaryType": "System.Collections.Generic.IDictionary",
            "responseArrayType": "System.Collections.ObjectModel.ObservableCollection",
            "responseDictionaryType": "System.Collections.Generic.Dictionary",
            "wrapResponses": false,
            "generateResponseClasses": true,
            "responseClass": "SwaggerResponse",
            "namespace": "MyNamespace",
            "requiredPropertiesMustBeDefined": true,
            "dateType": "System.DateTime",
            "dateTimeType": "System.DateTime",
            "timeType": "System.TimeSpan",
            "timeSpanType": "System.TimeSpan",
            "arrayType": "System.Collections.Generic.IEnumerable",
            "dictionaryType": "System.Collections.Generic.Dictionary",
            "arrayBaseType": "System.Collections.ObjectModel.ObservableCollection",
            "dictionaryBaseType": "System.Collections.Generic.Dictionary",
            "classStyle": "Inpc",
            "generateDefaultValues": true,
            "generateDataAnnotations": true,
            "excludedTypeNames": [],
            "handleReferences": false,
            "generateImmutableArrayProperties": false,
            "generateImmutableDictionaryProperties": false,
            "output": null
          }
        }
      }
      View Code
    3. service.extensions.ts :import 'rxjs/add/operator/finally';

    3.在package.json 中添加  "nswag": "^11.18.6"

       执行  npm install .如果安装不上,可以改变下仓库:npm set registry https://registry.npm.taobao.org/  参考这里

    4. 运行后端。

        双击运行nswag 下的refresh.bat  就可以生成 service-proxies.ts

     5.原理跟踪:

    • . ode_modules.bin swag 如下;
      @IF EXIST "%~dp0
      ode.exe" (
        "%~dp0
      ode.exe"  "%~dp0..
      swagin
      swag.js" %*
      ) ELSE (
        @SETLOCAL
        @SET PATHEXT=%PATHEXT:;.JS;=;%
        node  "%~dp0..
      swagin
      swag.js" %*
      )
    • nswag.js:
      #!/usr/bin/env node
      "use strict";
      
      var defaultCoreVersion = "11";
      var supportedCoreVersions = ["10", "11", "20", "21"];
      
      // Initialize
      process.title = 'nswag';
      console.log("NSwag NPM CLI");
      var args = process.argv.splice(2, process.argv.length - 2).map(function (a) { return a.indexOf(" ") === -1 ? a : '"' + a + '"' }).join(" ");
      
      // Legacy support
      args = args.replace("--x86", "/runtime:WinX86");
      args = args.replace("/runtime:x86", "/runtime:WinX86");
      args = args.replace("--core 1.0", "/runtime:NetCore10");
      args = args.replace("--core 1.1", "/runtime:NetCore11");
      args = args.replace("--core 2.0", "/runtime:NetCore20");
      args = args.replace("--core 2.1", "/runtime:NetCore21");
      args = args.replace("--core", "/runtime:NetCore" + defaultCoreVersion);
      
      // Search for full .NET installation
      var hasFullDotNet = false;
      var fs = require('fs');
      if (process.env["windir"]) {
          try {
              var stats = fs.lstatSync(process.env["windir"] + '/Microsoft.NET');
              if (stats.isDirectory())
                  hasFullDotNet = true;
          }
          catch (e) {
              console.log(e);
          }
      }
      
      var c = require('child_process');
      if (hasFullDotNet && args.toLowerCase().indexOf("/runtime:netcore") == -1) {
          // Run full .NET version
          if (args.toLowerCase().indexOf("/runtime:winx86") != -1) {
              var cmd = '"' + __dirname + '/binaries/Win/nswag.x86.exe" ' + args;
              var code = c.execSync(cmd, { stdio: [0, 1, 2] });
          } else {
              var cmd = '"' + __dirname + '/binaries/Win/nswag.exe" ' + args;
              var code = c.execSync(cmd, { stdio: [0, 1, 2] });
          }
      } else {
          // Run .NET Core version
          var defaultCmd = 'dotnet "' + __dirname + '/binaries/NetCore' + defaultCoreVersion + '/dotnet-nswag.dll" ' + args;
          var infoCmd = "dotnet --version";
          c.exec(infoCmd, (error, stdout, stderr) => {
              for (let version of supportedCoreVersions) {
                  var coreCmd = 'dotnet "' + __dirname + '/binaries/NetCore' + version + '/dotnet-nswag.dll" ' + args;
      
                  if (args.toLowerCase().indexOf("/runtime:netcore" + version) != -1) {
                      c.execSync(coreCmd, { stdio: [0, 1, 2] });
                      return;
                  } else {
                      if (!error) {
                          var coreVersion = stdout;
                          if (coreVersion.indexOf(version + ".0") !== -1) {
                              c.execSync(coreCmd, { stdio: [0, 1, 2] });
                              return;
                          }
                      }
                  }
              }
              c.execSync(defaultCmd, { stdio: [0, 1, 2] });
              return;
          });
      }
      View Code
    气功波(18037675651)
  • 相关阅读:
    mapreduce 本地调试需要注意的问题
    socket-----爬虫&&文件传输
    多个地点ping服务器
    linux grep命令详解
    关于真多核和加多核&线程由哪几部分组成
    内存溢出和内存泄漏
    指针和引用的区别
    Doxygen的使用,配置及实例
    【转】doxygen+graphviz生成工程中的类继承树及函数调用图
    转载--void指针(void *的用法)
  • 原文地址:https://www.cnblogs.com/qgbo/p/11592867.html
Copyright © 2011-2022 走看看