使用 TypeScript 和 ASP.Net WebApi 进行完整打字

Full typing with TypeScript and ASP.Net WebApi

是否有任何方法可以为 WebApi 方法自动生成 OpenAPI/Swagger 元数据,甚至可以生成客户端打字稿模型?

我发现 Swashbuckle and Swagger to JS & Typescript Codegen 不错,但我想知道其他库。

如果能给出每种方法的优缺点就完美了。

请尝试 Swagger-Codegen,这是一个免费的开源代码生成器,用于生成 REST API 客户端(例如 C#、TypeScript、Javascript 等)或服务器存根 ( ASP.NET5) 给定 OpenAPI/Swagger 规格。

这是一个很好的起点:https://github.com/swagger-api/swagger-codegen#getting-started

对于typescript,Swagger Codegen 支持不同的库:typescript-nodetypescript-angulartypescript-angular2typescript-fetch

您还可以查看 NSwag,一个用于 .NET 和 TypeScript 的 Swagger 工具链。

该工具根据这些 Swagger 规范从现有 Web API 控制器和客户端代码生成 Swagger 规范。您可以使用回调或承诺、AngularJS 或 Angular2 为 JQuery 生成 TypeScript 客户端代码。生成的 DTO(request/response 类型)可以是接口或 类(带有日期转换、小驼峰式等)

该项目可以与简单易用的桌面 GUI、构建脚本或命令行工具一起使用。

免责声明:我是 NSwag 的贡献者之一。

openapi-typescript

打字稿的 openapi 客户端生成器

npm install @cblx.br/openapi-typescript --save-dev

创建一个 openapi-typescript.config.js

var config = {
    url: "<url>/swagger.json",
    outputDir: "./src/client",
};

module.exports = config;

执行它:

npx openapi-typescript


Angular 示例:

创建应用-connector.ts

import { Injectable, Inject } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { OpenApiConnector } from '@cblx.br/openapi-typescript';

@Injectable({
    providedIn: 'root'
})
export class AppConnector implements OpenApiConnector {

    constructor(@Inject('BASE_URL') private baseUrl: string, private http: HttpClient) {}

    async request(method: string, path: string, parameters: any, body: any) {
        return await this.http.request(method, this.baseUrl + path, {
            body: body,
            params: parameters
        }).toPromise();
    }
}

openapi-typescript.config.js

var config = {
    url: "<url>/swagger.json",
    outputDir: "./src/client",
     events: {
        beforeWriteServiceClass: () => {
            var content = '';
            content += `import { Inject, Injectable } from '@angular/core';\n`;
            content += `import { AppConnector } from 'app/app-connector';\n`;
            content += `@Injectable({ providedIn: 'root' })\n`;
            return content;
        },
        createConnectorDecorator: () => {
            return `@Inject(AppConnector) `;
        }
    }
};

module.exports = config;

最终您需要 TypeScript 模型,而不是 Swagger 元数据。 ASP.NET Web API Client Generators 在 SDLC 期间可能比 swagger 工具链更方便,开销更少。

虽然程序员通常使用 WebApiClientGen 生成客户端 API 代码,但该项目还提供 POCO2TS.exe,一个从 POCO 类 生成 TypsScript 接口的命令行程序。您可以使用 Poco2ts.exe 或 poco2ts 组件将代码生成与构建管道集成。