C# 发布JSON对象HTTPClient。收到的值为空WEB API ASP MVC

C# 发布JSON对象HTTPClient。收到的值为空WEB API ASP MVC,c#,asp.net,json,asp.net-mvc,http,C#,Asp.net,Json,Asp.net Mvc,Http,我试图将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")).Re

我试图将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方法中收到的值为空

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;

这是因为WebApi不擅长从主体序列化基本类型,当您将“Content Type”头作为application/json发送时,框架试图用set json序列化器序列化内容,但无法实现,这就是为什么变量中会出现null

你也可以

  • 将参数的类型从string更改为JToken或
  • 包括处理纯文本的媒体类型格式化程序(请参阅)

  • 因为您调用,而您的方法期望。更改对value的调用或更改值的方法签名,在本例中,这些值更有意义

    从您的第一个代码段(您发出请求的地方)中,
    数据
    是什么样子的?我的数据是一个JSON文件,由另一个方法生成并传递到此方法,数据的生成是否正确?是否以WebAPI操作签名将自动绑定的方式命名数据?@Jasen能否请您详细解释一下您的意思?我已将参数类型更改为JToken,但现在StringContent正在抛出一个exception@IliaAptsiauri它抛出了什么异常?它说没有覆盖方法存在,我尝试过使用data.toString()基本上和以前一样,但不起作用如何使用
    MediaTypeFormatter
    ?我已经添加到我的应用程序中,你能告诉我…我们如何使用它吗?