cURL 转 C#
粘贴一条 curl 命令,得到把请求头放在 .NET 要求位置上的 HttpClient 代码。
cURL 转 C# 完全在你的浏览器中运行:粘贴的命令连同其中的令牌都在本机转换,不会上传。
打开 cURL 转 Java
关于 cURL 转 C#
把 API 文档里的 curl 命令改写成 C# 是件小事,却总在同一个地方翻车:.NET 把请求头分成请求本身与内容两类。Content-Type 属于 HttpContent,而不是 HttpRequestMessage,设错对象不会编译报错,而是在运行时抛异常。这个转换器解析 curl 的各项参数——方法、请求头、请求体,以及会变成基本认证的 -u——并生成一段每个请求头都放对位置的 HttpClient 程序。
功能特性
- 解析方法、请求头、请求体与基本认证
- 把 Content-Type 放到 StringContent 上,符合 .NET 的要求
- 把 -u 的凭据渲染成 AuthenticationHeaderValue
- 非标准动词通过 HttpMethod 构造函数生成
- 按请求实际需要添加 using 指令
- 把 JSON 请求体转义成合法的 C# 字面量
如何使用 cURL 转 C#
- 粘贴带请求头与请求体的 curl 命令
- 边输入边阅读生成的 C# 代码
- 复制代码,或下载 Program.cs
- 查看关于未被转换参数的提示
示例
输入
curl -X POST https://api.example.com/users -H "Content-Type: application/json" -d '{"name":"Ada"}'
输出
request.Content = new StringContent(
"{\"name\":\"Ada\"}",
Encoding.UTF8,
"application/json");
媒体类型交给 StringContent,而不是 request.Headers——正是后者会在运行时抛异常。
常见错误与故障排除
- 设置 Content-Type 时抛出 InvalidOperationException。 — 在 .NET 中它是内容头,必须设置在 HttpContent 上,生成的代码正是这样做的。
- curl 能通,C# 却返回 401。 — 检查凭据是怎么传过去的:-u 会变成 base64 的基本认证头,而粘贴时带上换行的令牌会失败。
常见问题
- 怎样把 curl 命令转成 C#?
- 粘贴到上方即可:方法、URL、请求头与请求体会被解析并生成一段 HttpClient 程序。
- 为什么不能在 HttpRequestMessage 上设置 Content-Type?
- 因为 .NET 区分请求头与内容头,而 Content-Type 属于后者,设在 request.Headers 上会抛异常。
- C# 里怎样发送基本认证?
- 把 user:password 做 base64 编码,再以 Basic 方案设置成 DefaultRequestHeaders 上的 AuthenticationHeaderValue。
- 我的 curl 命令会被发送出去吗?
- 不会。它在你的浏览器中解析与转换,因此其中的令牌和密钥都留在本机。
相关工具
全部 ArrayKit 工具