如何发布json请求

如何发布json请求,json,asp.net-web-api,Json,Asp.net Web Api,我正在尝试向我的web api发布json请求: json: 我的api控制器如下所示: public class DataController : ApiController { // GET api/data public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; }

我正在尝试向我的web api发布json请求:

json:

我的api控制器如下所示:

 public class DataController : ApiController
    {
        // GET api/data
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET api/data/5
        public string Get(int id)
        {
            return "value";
        }

        // POST api/data
        public void Post([FromBody]string value)
        {
        }

        // PUT api/data/5
        public void Put(int id, [FromBody]string value)
        {
        }

        // DELETE api/data/5
        public void Delete(int id)
        {
        }
    }
公共类数据控制器:ApiController
{
//获取api/数据
公共IEnumerable Get()
{
返回新字符串[]{“value1”,“value2”};
}
//获取api/data/5
公共字符串Get(int-id)
{
返回“值”;
}
//发布api/数据
公共作废帖子([FromBody]字符串值)
{
}
//把api/data/5放进去
公共void Put(int id,[FromBody]字符串值)
{
}
//删除api/data/5
公共无效删除(int-id)
{
}
}

我试图点击post方法,但字符串值为空?我正在使用fiddler发布请求。

您正在发布一个JSON数组,但该方法需要一个字符串。模型绑定器不知道如何处理此问题,因此您将得到一个空值

有几种方法可以解决这个问题

一种是通过将JSON包装在引号中(必要时在字符串中转义引号)来传递JavaScript字符串。该方法现在将接收一个字符串,模型绑定器将能够将其绑定到字符串参数

第二个选项是,如果您使用的是Web API 2,其中模型绑定器使用的是Json.NET,那么您可以将参数更改为JObject类型,并传入原始Json。Json.NET将解析Json并将其放入
JObject
中。您可以使用此
JObject
,也可以通过调用
.ToString()
将其转换回JSON

第三个选项是创建一个类来表示输入,并将参数更改为强类型对象

 public class DataController : ApiController
    {
        // GET api/data
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET api/data/5
        public string Get(int id)
        {
            return "value";
        }

        // POST api/data
        public void Post([FromBody]string value)
        {
        }

        // PUT api/data/5
        public void Put(int id, [FromBody]string value)
        {
        }

        // DELETE api/data/5
        public void Delete(int id)
        {
        }
    }