ASP .Net Core Dto&controllers to typescript classes&接口

时间:2017-06-09 18:02:11

标签: c# asp.net typescript typelite

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

  1. 使用C#Dto(数据传输对象)并将它们转换为typescript接口,以确保客户端模型与服务器端同步。
  2. 使用ASP .Net核心控制器端点并将其转换为使用http服务或类似服务的typescript类。同样,确保客户端请求与服务器同步。
  3. 每当对控制器或dto进行更改时,打字稿生成的项目应该在开发时刷新以保持同步。

    我做了一些研究,发现了以下Stack Overflow线程和其他来源:

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

    • Swashbuckly.AspNetCore允许我从控制器和dto生成swagger文档,然后任务就是解释swagger文档并从中创建typescript类和接口。缺点是,据我所知,这需要我启动服务器,如果可能的话我想避免,因为这会使文件更改的更新变得困难。

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

    所以,我想到了以下可以解决这两个问题的解决方案:

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

    2. 在每个端点上创建注释,类似于[Produces(SomeDto)],其中我将创建一个小型控制台应用程序,该应用程序使用反射来获取信息并从中生成打字稿。这可能需要开发人员保持这些信息的同步,所以在我看来有一些重复的信息。

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

      期待任何讨论/建议。

2 个答案:

答案 0 :(得分:5)

考虑到你的第一点,我为使用MSBUILD任务的打字稿界面生成器制作了一个C#DTO,因此它完全独立于你的工作流程。它也只是来自源,它使它不那么稳定,但你不必制作任何模板文件。

找到它here或只是在nuget上搜索MTT

答案 1 :(得分:2)

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

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

除此之外,它还有很多繁重的工作,并且很容易配置。