首页 > 解决方案 > 服务未通过 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 传递的数据

标签: c#asp.net-web-apisoap

解决方案


要直接回答您的问题,从请求正文中提取字符串,请按照此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 。如果出于某种原因您不想更改客户端代码,这些将特别有用。也就是说,如果您最终要使用开箱即用的功能,我看不出有什么特别的理由进行手动序列化。


推荐阅读