ASP .Net Core Dto和控制器到打字稿类和接口

Jon*_*sMH 3 c# asp.net typescript typelite

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

  1. 使用C#Dto(数据传输对象)并将其转换为TypeScript接口,以确保客户端模型与服务器端同步。
  2. 使用ASP .Net核心控制器端点,并将其转换为使用http服务或类似服务的Typescript类。同样,以确保客户端请求与服务器同步。

并且无论何时对控制器或dto进行了更改,打字稿生成的项目都应刷新以在开发过程中保持同步。

我进行了一些研究,发现以下堆栈溢出线程和其他来源:

  • DTO到TypeScript生成器,建议使用TypeLite库,这似乎很棒,但是根据文档,这要么需要[TsClass]属性,要么需要在启动时引用类。但是,由于我正在使用的项目结构已设置好,因此所有dto都位于* .Dtos命名空间中,因此我有点缺少TypeScript.Definitions()。ForNameSpace()。而且,这仅解决了第一个想法/问题。

  • Swashbuckly.AspNetCore允许我从控制器和dto两者生成swagger文档,然后任务是以某种方式解释swagger文档并从中创建打字稿类和接口。缺点是,据我所知,这需要我启动服务器,如果可能的话,我希望避免这种情况,因为这将使文件更改难以更新。

仅供参考,这是一个我即将开始的新项目,因此没有要更新的旧代码,而且,所有ASP .NET Core端点都将返回IActionResult以启用Ok(),BadRequest()等的返回。 。因此,在我看来,很难获得回报模型,因为没有一种简单的方法来获取产生的dto(如果有)。

因此,我想到了以下解决两个问题的解决方案:

  1. 创建一个单独的使用Swashbuckly库的程序包/应用程序,并在不启动整个服务器的情况下生成模型和控制器。

  2. 在每个端点上创建注释,类似于[Produces(SomeDto)],在此之后,我将创建一个小的控制台应用程序,该应用程序使用反射来获取信息并从中生成打字稿。这会导致开发人员必须使这些信息保持同步,因此在我看来,存在一些重复的信息。

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

期待任何讨论/建议。

Fou*_*Nil 5

考虑到您的第一点,我做了一个使用MSBUILD任务的C#DTO到打字稿接口生成器,因此它完全独立于您的工作流程。它也只是从源头上做到这一点,这使其稳定性稍差一些,但是您不必制作任何模板文件。

在这里找到它或者只是在nuget上搜索MTT