如何发布json请求

时间:2014-03-17 23:48:47

标签: json asp.net-web-api

我正在尝试将json请求发布到我的网络API:

JSON:

[{
    'rows': [
        {
            'country': 'UK',
            'description': 'this is a desc',
            'gezien': true,
            'Count': 3,
            'url': 'een/twee',
            'stam': 'blabla',
            'kanaal': 'NOS'
        },
        {
            'url': 'drie/vier',
            'stam': 'divers',
            'kanaal': 'SRV'
        }

    ],
    'skip': 0,
    'take': 10,
    'total': 100
}]

我的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)
        {
        }
    }

我试图点击post方法,但字符串值为null?我正在使用小提琴手发布请求。

1 个答案:

答案 0 :(得分:1)

您正在发布JSON数组,但该方法需要一个字符串。模型绑定器不知道如何处理这个问题,所以你得到了一个null。

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

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

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

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