【问题标题】:ASP .Net Core Dto's and Controllers to typescript classes & interfacesASP .Net Core Dto 和控制器到 typescript 类和接口
【发布时间】:2017-06-09 18:02:10
【问题描述】:

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

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

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

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

  • DTO to TypeScript generator 建议使用 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# 源文件保存时自动更新。

期待任何讨论/建议。

【问题讨论】:

  • 我一直在评估类似的东西。我会警告你,如果你走 TypeLite 路径,它目前不支持 .NET Core;但是,我发现 TypeLite 是 .NET 4 中的最佳解决方案。虽然它可能不提供命名空间加载模式,但它使用递归标识来确定所有引用的属性模型。因此,如果您有一个或两个顶级模型,您可以简单地引用它们,并且所有子属性类型也将被加载到最低级别的模型。

标签: c# asp.net typescript typelite


【解决方案1】:

考虑到您的第一点,我制作了一个 C# DTO 到 typescript 界面生成器,它使用 MSBUILD 任务,因此它完全独立于您的工作流程。它也只是从源代码中执行,这使得它不太稳定,但您不必制作任何模板文件。

找到 here 或在 nuget 上搜索 MTT

【讨论】:

  • 太棒了,感谢 MTT。正在寻找具有自定义输出目录的解决方案(在 Visual Studio 解决方案之外)。
  • 谢谢!!我看过一堆这些并取得了各种成功,但没有什么真正达到目标。你的优雅和简单,足以扩展。完美:-)
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-02-18
    • 2021-06-25
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 2022-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多