c# - 使用 CURL 发送到 Azure Function 的 Newtonsoft 反序列化 JSON 的异常
问题描述
使用 CURL 发布到我的 API 时,我使用的语法是:
curl -H "Content-Type:application/json" -X POST -d '{"domainName":"fabrikam.onmicrosoft.com","apiKey":"980709a87df09a78dsf90a8s7f"}' http://localhost:7071/api/getnodedata
我的 Web API 通过以下方式接收请求:
dynamic data = await req.Content.ReadAsAsync<object>();
NodeModel nodeData = Newtonsoft.Json.JsonConvert.DeserializeObject<NodeModel>(data);
我的课很简单:
public class NodeModel : TableEntity
{
public string DomainName { get; set; }
public string ApiKey { get; set; }
}
public static NodeModel(string DomainName, string ApiKey)
{
this.PartitionKey = DomainName;
this.RowKey = ApiKey;
}
检查data
让我'{domainName:fabrikam.onmicrosoft.com,apiKey:980709a87df09a78dsf90a8s7f}'
看起来不错,除了每个键/值对周围缺少双引号。CURL 在发送之前删除双引号(使用 Fiddler 跟踪验证)。
我在func.exe
本地应用程序中遇到如下异常:
mscorlib:执行函数时出现异常:GetNodeData。Newtonsoft.Json:解析布尔值时出错。路径“域名”
我试过了:
- 键/值之间的空格
- 包裹键的单引号
- 包裹值的单引号
- 研究 Newtonsoft 网站以获得正确的语法
- 研究此站点以获取其他示例(这似乎与我正在做的事情没有任何不同)。
有关使用其他工具的任何建议或说明?我也有 Fiddler,但还没有使用它POST
来将数据传输到服务中。
解决方案
总结答案中的评论......
使用 Fiddler - 这是一个很棒的工具,但它可以作为您机器上的代理服务器。各种工具将不尊重系统设置,并且
curl
是其中之一。.NETHttpClient
也是一样。所以你需要告诉它使用代理--proxy
(或-x
简称:curl -H "Content-Type: application/json" -X POST -d '...snip...' http://localhost:7071/api/getnodedata -x http://localhost:8888
curl
正在去掉双引号。为了解决这个问题,您需要使用双引号将数据括起来并用反斜杠转义内引号:-d "{\"domainName\": \"fabrikam.onmicrosoft.com\", \"apiKey\": \"980709a87df09a78dsf90a8s7f\"}"
我通常不建议使用
curl
它来测试 API。这是一个很棒的工具,但正如您所见,使用起来很尴尬。相反,我建议使用Postman。奖金!您的 C# 代码也有点歪斜。将数据作为字符串读取并传递给 JSON.Net:
string data = await req.Content.ReadAsStringAsync(); NodeModel nodeData = Newtonsoft.Json.JsonConvert.DeserializeObject<NodeModel>(data);
或者,更好的是,让您已经在使用的扩展程序为您完成工作:
NodeModel nodeData = await req.Content.ReadAsAsync<NodeModel>();
推荐阅读
- function - Julia 中的这个递归函数是如何工作的?
- google-cloud-sql - 从多个 VPC 访问 Google Cloud SQL
- c# - 如何在 C# API 中返回 JSON
- python - 如何在客户端服务器设置中使用 MySQL 和 Python
- vue.js - Vuetify 加载器组件,直到页面完全加载
- c# - 从文件系统获取图像并使用 HttpClient 将它们发送到 C# 中的 API 的好方法
- reactjs - React 钩子的依赖项是什么?
- node.js - 错误找不到模块,正在测试 Nestjs 服务
- java - Android Material Design 问题从 1.0.0 更新到 1.1.0
- tf.keras - Keras 无限循环