0

0

C# TypeSpec生成代码方法 C#如何使用TypeSpec定义API并生成代码

煙雲

煙雲

发布时间:2026-02-07 08:06:10

|

680人浏览过

|

来源于php中文网

原创

TypeSpec 是微软推出的基于 TypeScript 的接口定义语言,用于描述 RESTful API 结构,本身非 C# 一部分;通过 @typespec/csharp 插件可生成 C# 客户端代码,但不支持服务端自动生成,也不参与运行时编译。

c# typespec生成代码方法 c#如何使用typespec定义api并生成代码

TypeSpec 是什么,和 C# 有什么关系?

TypeSpec 本身不是 C# 的一部分,它是微软推出的、基于 TypeScript 的接口定义语言(IDL),用来描述 API(尤其是 RESTful 服务)的结构。它不直接生成 C# 类型,但可通过插件(如 @typespec/openapi3 + @typespec/csharp)输出 C# 客户端或服务端代码。关键点是:TypeSpec 不编译进运行时,它只在设计/生成阶段起作用。

如果你期望“写个 .tsp 文件就自动编译成可运行的 C# 项目”,那会失望——它更像 Swagger + TypeScript 的增强版,目标是统一契约、驱动多语言代码生成。

如何用 TypeSpec 定义一个简单 API 并生成 C# 客户端?

先确保安装了 Node.js 和 TypeSpec CLI:

npm install -g @typespec/cli

创建 main.tsp,定义一个待生成的 API:

import "@typespec/http";
import "@typespec/openapi3";
import "@typespec/csharp";

@service({title: "TodoService"}) namespace TodoApi { @route("/todos") @get op listTodos(): Todo[];

@route("/todos/{id}") @get op getTodo(@path id: string): Todo; }

model Todo { @key id: string; name: string; completed: boolean; }

然后执行生成命令(需先安装 @typespec/csharp 插件):

npx tsp compile . --emit @typespec/csharp --option "@typespec/csharp.emitter-output-dir=./GeneratedClient"

生成的 C# 代码默认包含 TodoApiClientTodo 模型等,使用的是 System.Net.HttpSystem.Text.Json,不依赖第三方 HTTP 客户端库。

maven使用方法 中文WORD版
maven使用方法 中文WORD版

本文档主要讲述的是maven使用方法;Maven是基于项目对象模型的(pom),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。Maven将你的注意力从昨夜基层转移到项目管理层。Maven项目已经能够知道 如何构建和捆绑代码,运行测试,生成文档并宿主项目网页。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看

下载
  • @typespec/csharp 目前仍为预览版,生成的代码可能缺少部分特性(如分页支持、自定义序列化器钩子)
  • 必须显式导入 @typespec/csharp,否则 --emit 会静默失败
  • 路径参数(@path)、查询参数(@query)、请求体(@body)需正确标注,否则生成的 C# 方法签名可能漏参数或类型错误

C# 服务端生成是否可行?

目前(2024 年中)@typespec/csharp 官方仅支持客户端生成(即调用方代码),不生成 ASP.NET Core Controller 或 Minimal API。想用 TypeSpec 驱动服务端,有两条现实路径:

  • @typespec/openapi3 导出 OpenAPI JSON,再用 NSwagMicrosoft.dotnet-openapi 工具反向生成服务端骨架(但会丢失 TypeSpec 特有语义,如 @visibility@friendlyName
  • 手动实现 Controller,并用 [ProducesResponseType] 等特性对齐 OpenAPI 输出,再通过 tsp compile . --emit @typespec/openapi3 验证一致性
  • 社区有实验性插件(如 typespec-csharp-server)尝试生成 Minimal API,但稳定性差、无官方维护,不建议用于生产

换句话说:TypeSpec 当前对 C# 服务端是“契约先行但手写实现”,而非“契约即实现”。

常见报错与绕过方式

运行 tsp compile 时容易遇到以下问题:

  • Error: Cannot resolve emitter "@typespec/csharp" → 检查是否在项目根目录执行,且 package.json 中已声明 @typespec/csharp 为 devDependency;不要用全局 npx tsp 调用本地插件
  • 生成的 C# 类名含非法字符(如 My-Resource)→ TypeSpec 默认转为 PascalCase,但连字符会被忽略导致冲突(MyResourceMyResource),改用 @friendlyName("MyResource") 显式指定
  • DateTime 字段生成为 DateTimeOffset? 而非 DateTime? → 这是 OpenAPI 3.0 对时间字段的规范行为,若后端强制用 DateTime,需在 C# 客户端手动映射或改用 @type 注解配合自定义序列化器

最易被忽略的一点:TypeSpec 的 @doc@summary 等注释默认不会出现在生成的 C# XML 注释里,需额外配置 --option "@typespec/csharp.include-docs=true" 才启用。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
PHP API接口开发与RESTful实践
PHP API接口开发与RESTful实践

本专题聚焦 PHP在API接口开发中的应用,系统讲解 RESTful 架构设计原则、路由处理、请求参数解析、JSON数据返回、身份验证(Token/JWT)、跨域处理以及接口调试与异常处理。通过实战案例(如用户管理系统、商品信息接口服务),帮助开发者掌握 PHP构建高效、可维护的RESTful API服务能力。

170

2025.11.26

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

430

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

541

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

313

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

79

2025.09.10

resource是什么文件
resource是什么文件

Resource文件是一种特殊类型的文件,它通常用于存储应用程序或操作系统中的各种资源信息。它们在应用程序开发中起着关键作用,并在跨平台开发和国际化方面提供支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

164

2023.12.20

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1915

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2098

2024.08.01

Golang处理数据库错误教程合集
Golang处理数据库错误教程合集

本专题整合了Golang数据库错误处理方法、技巧、管理策略相关内容,阅读专题下面的文章了解更多详细内容。

2

2026.02.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 8.9万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 3.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号