发布 JSON 对象 HTTPClient。接收到的值为 NULL WEB API ASP MVC

Posted

技术标签:

【中文标题】发布 JSON 对象 HTTPClient。接收到的值为 NULL WEB API ASP MVC【英文标题】:POSTing JSON Object HTTPClient. Received Value is NULL WEB API ASP MVC 【发布时间】:2015-07-31 21:19:34 【问题描述】:

我正在尝试将 JSON 数据发布到 web api,这两个项目都在我的本地计算机上运行。

using (var client = new HttpClient())

    client.BaseAddress = new Uri(@"http://localhost:53818/");
    var result = client.PostAsync("api/values", new StringContent(data, Encoding.UTF8, "application/json")).Result;
    string resultContent = result.Content.ReadAsStringAsync().Result;
    Console.WriteLine(resultContent);

在这个 post 方法中接收到的值为 NULL

public HttpResponseMessage Post([FromBody]string value)

    return new HttpResponseMessage(HttpStatusCode.Created);

编辑 ----------- 所以我设法找出问题所在。我已经替换了这行代码

client.PostAsync("api/values", new StringContent(data, Encoding.UTF8, "application/json")).Result;

以下内容有效,如果有人能发布解释,我将不胜感激

var response = client.PostAsJsonAsync("api/values", data).Result;

【问题讨论】:

data 在您的第一个 sn-p(您提出请求的位置)中看起来像什么? 我的数据是一个json文件,用另一种方法生成,传给这个,数据生成正确 那么数据的命名方式是否可以让您的 WebAPI 操作签名通过自动绑定获取? @Jasen 你能详细解释一下你的意思吗? 【参考方案1】:

这是因为 WebApi 不擅长从正文中序列化原始类型,当您将“Content-Type”标头作为应用程序/json 发送时,框架会尝试使用设置的 Json 序列化器序列化内容并且不是不能,这就是为什么你在变量中得到 null 的原因。

你可以

    将参数的类型从字符串更改为 JToken 或 包括处理纯文本的媒体类型格式化程序(请参阅https://***.com/a/29914360/1422608)

【讨论】:

我将参数的类型更改为 JToken 但现在 StringContent 抛出异常 @IliaAptsiauri 它抛出了什么异常? 它说不存在覆盖方法,我尝试使用 data.toString() 基本上和原来一样,它没有工作 如何使用MediaTypeFormatter ?我已添加到我的应用程序中,您能告诉我..我们如何使用它?【参考方案2】:

因为您调用 values 而您的方法期望 value。更改对值的调用或更改值的方法签名,在这种情况下会更有意义

【讨论】:

以上是关于发布 JSON 对象 HTTPClient。接收到的值为 NULL WEB API ASP MVC的主要内容,如果未能解决你的问题,请参考以下文章

使用 HttpClient 将 Content-Type 设置为“application/json”并将对象添加到正文

使用 httpClient windows Phone 8.1 发布 JSON 对象

java httpclient发送json 请求 ,go服务端接收

WebClient和HttpClient, 以及webapi上传图片

如何使用 HttpClient 将 JSON 数据发布到 Web API

C# 使用 HttpClient 从 JSON 响应中获取特定对象