c# - 服务未通过 WebClient 接收 API 数据
问题描述
我正在尝试将数据从 API 发送到 Web 服务。但它总是收到 null
API 中的代码 - WEB 客户端:
using (var webClient = new WebClient())
{
webClient.Headers[HttpRequestHeader.ContentType] = "application/json";
var url = string.Format("End Point URL /SomeAction");
var user= new User()
{
...
};
var data = JsonConvert.SerializeObject(user);
webClient.UploadString(url, data);
}
服务:
public ActionResult SomeAction([System.Web.Http.FromBody]string data)
{
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
FOUsers dataFromXBO =
(FOUsers)json_serializer.DeserializeObject(data);
//statements
}
请建议,我如何接收从 API 传递的数据
解决方案
要直接回答您的问题,从请求正文中提取字符串,请按照此SO 链接将您的“字符串”包装在另一个对象中。IE。
class UserPostRequest{
public string UserJson{get; set;}
}
并更改控制器中的签名,如下所示:
public ActionResult SomeAction([System.Web.Http.FromBody]UserPostRequest data)
话虽如此,在这种特定情况下,您可能可以这样做:
public ActionResult SomeAction([System.Web.Http.FromBody]FOUsers data)
并让 API 为您处理反序列化。
编辑:
经过进一步研究,为了让我的答案的前半部分更加完整,让我承认有很多方法可以剥去那只特定猫的皮。提供的答案只是我历史上使用过的答案。这是另一个 SO 帖子,它列举了其他解决方案,包括在您的 API 方法签名中接受动态或HttpRequestMessage 。如果出于某种原因您不想更改客户端代码,这些将特别有用。也就是说,如果您最终要使用开箱即用的功能,我看不出有什么特别的理由进行手动序列化。
推荐阅读
- php - PhP日期时间添加
- javascript - less.js 在 Chrome 扩展上获得同步 XMLHttpRequest 错误
- mongodb - Mongo查询 - 获取与过滤器列表中的指定值不完全匹配的记录
- node.js - 生产模式下的 Electron 应用程序无法在 Mac 中通过 child_process.spawnSync API 运行外部脚本,但在 Linux 中运行良好
- c# - 基于已解析属性的 HotChocolate 过滤器集合
- vue.js - Vuex mapState 基于路由和路由参数
- python - sqlAlchemy:无法确定父/子表之间的连接条件
- c - 创建一个使用不同数据类型的数组的静态结构
- java - 从扩展名确定文件类型
- android - 查看 longclick 被 textView 子级中止