在Web API控制器

时间:2016-04-08 12:33:20

标签: c# serialization asp.net-web-api json.net

以下是我在Ui的Json输入:

{
    "data": [{
        "Id": 1
    }, {
        "Id": 2
    }, {
        "Id": 3
    }]
}

我可以在下面显示的对象结构中没有问题地收到它:

   public class TestController : ApiController
    {
        /// <summary>
        /// Http Get call to get the Terminal Business Entity Wrapper
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>

        [HttpPost]
        [Route("api/TestJsonInput")]
        public string TestJsonInput([FromBody] TestInput input)
        {
            return JsonConvert.SerializeObject(input.data);
        }        

        public class TestInput
        {
            public List<Info> data { get; set; }
        }

        public class Info
        {
            public int Id { get; set; }
        }

    }

但我的目标是接受以下API方法:

      [HttpPost]
        [Route("api/TestJsonInput")]
        public string TestJsonInput1([FromBody] string input)
        {
            return input;
        }

这个要求的原因是,我没有使用通过Web API反序列化的Json对象,我只需要将实际的Json持久化到数据库并获取并返回到Ui,它将解析它。

由于我无法按照建议在字符串输入中接收,所以我必须执行Json序列化的额外步骤,以实现目标的反序列化。任何机制让我完全通过接收字符串并直接使用它来避免这种解决方法。我目前正在使用Postman进行测试

1 个答案:

答案 0 :(得分:5)

无论您在方法的参数中添加什么内容,都可以直接将字体内容作为字符串读取。你实际上不需要在参数中放任何东西,你仍然可以阅读正文。

[HttpPost]
[Route("api/TestJsonInput")]
public string TestJsonInput1()
{
    string JsonContent = Request.Content.ReadAsStringAsync().Result;
    return JsonContent;
}

您不需要将输入作为参数读取。