网站搜索

c# - ASP .Net Core DTO 和控制器到 TypeScript 类和接口


我的想法包括两个主要元素:

  1. 将 C# Dto(数据传输对象)转换为 TypeScript 接口,以确保客户端模型与服务器端保持同步。
  2. 获取 ASP .Net Core 控制器端点并将它们转换为使用 HTTP 服务或类似工具的 TypeScript 类。同样,以确保客户端请求与服务器同步。

每当对控制器或 DTO 进行更改时,生成的 TypeScript 项目应随之刷新,以在开发期间保持同步。

我做了一些研究,找到了以下 Stack Overflow 讨论串和其他来源:

  • 将 DTO 转换为 TypeScript 的生成器建议使用 TypeLite 库,这个库看起来很不错,但根据文档,这要么需要一个 [TsClass] 属性,要么在启动时引用类。但是,由于我使用的项目结构是将所有 DTO 都放在 *.Dtos 命名空间中,我有点找不到 TypeScript.Definitions().ForNameSpace()。此外,这只解决了第一个想法/问题。

  • Swashbuckly.AspNetCore 允许我从控制器和 DTO 生成 Swagger 文档,然后任务就是以某种方式解释 Swagger 文档并从中创建 TypeScript 类和接口。缺点是,据我所知,这需要我启动服务器,如果可能的话我希望避免这样做,因为这会使得在文件更改时更新变得困难。

仅供参考,这是我即将开始的一个新项目,所以没有需要更新的遗留代码。此外,所有的 ASP .NET Core 端点都会返回 IActionResult,以便可以返回 Ok()、BadRequest() 等。因此,在我看来,要获取返回模型会比较困难,因为没有简单的方法可以得到它生成的 dto,如果有的话。

所以,我想出了以下解决方案,可以同时解决两个问题:

  1. 创建一个单独的包/应用程序,使用 Swashbuckly 库生成模型和控制器,而无需启动整个服务器。

  2. 在每个端点上创建注释,大致类似于 [Produces(SomeDto)],之后我会创建一个小型控制台应用程序,使用反射来获取信息并生成 TypeScript。这当然需要开发人员保持这些信息同步,所以在我看来,这有点像重复信息。

但是,这两种解决方案在保存 C# 源文件时都不会自动更新。

期待任何讨论/建议。

答案#1

考虑到你的第一个观点,我制作了一个 C# DTO 到 TypeScript 接口的生成器,它使用 MSBUILD 任务,所以它完全独立于你的工作流程。它也只是从源生成,这使得它稳定性稍差,但你不必制作任何模板文件。

在这里找到它,或者直接在 NuGet 上搜索 MTT

答案#2

如果你还在寻找……我认为 Typewriter http://frhagn.github.io/Typewriter/ 是你的解决方案。你可以生成模板,指定要转换的内容和方式。

它不能满足我所有的需求,仅仅是因为我需要一个工具来动态生成复杂的文件夹结构,但这是他们 v2 路线图中即将推出的功能。

除此之外,它承担了大量繁重的工作,而且配置起来相当容易。

相关文章