Web API [FromBody]始终为null

时间:2020-05-05 09:27:50

标签: c# webapi

我目前正在创建可写入表的Web API。我使用[FromBody]标签传递表格的值。

问题在于[FromBody]值始终为null。我正在使用Advanced Rest Client测试我的API。

public HttpResponseMessage Post(int id, [FromBody]string value)
{
     //DO Something
}

enter image description here

2 个答案:

答案 0 :(得分:2)

问题出在类型转换中。您正在发送一个包含一个字典的值的数组,并试图在该方法中接收一个字符串。 ASP.NET无法将您的结构转换为string并使用null作为默认值。

因此,测试方法的简单方法是在正文中传递一个简单的字符串。但是正确的方法是更改​​传递给操作方法的对象的类型:

public HttpResponseMessage Post(int id, [FromBody]List<Dictionary<string,string>> value)
{
     //DO Something
}

在系统执行操作时手动解析JSON很奇怪,但是您应该将string传递给该方法。只需将您的身体包裹在""上,即可在该方法中获得纯JSON。您也可以通过StreamReader手动阅读正文:

public HttpResponseMessage Post(int id)
{
    using (StreamReader reader = new StreamReader(Request.Body, Encoding.UTF8))
    {  
        var plainBody = reader.ReadToEnd();
    }
}

答案 1 :(得分:0)

如果您不想对主体进行反序列化,则只需从Request.Body属性中读取字符串即可。

public Task<HttpResponseMessage> Post(int id)
{
    var reader = new StreamReader(Request.Body);
    var bodyString = await reader.ReadToEndAsync();

    ...
}

相关问题