【发布时间】:2020-05-05 09:27:50
【问题描述】:
我目前正在创建一个写入表格的 Web API。我使用 [FromBody] 标签来传递表格的值。
问题在于 [FromBody] 值始终为空。我正在使用 Advanced Rest Client 测试我的 API。
public HttpResponseMessage Post(int id, [FromBody]string value)
{
//DO Something
}
【问题讨论】:
我目前正在创建一个写入表格的 Web API。我使用 [FromBody] 标签来传递表格的值。
问题在于 [FromBody] 值始终为空。我正在使用 Advanced Rest Client 测试我的 API。
public HttpResponseMessage Post(int id, [FromBody]string value)
{
//DO Something
}
【问题讨论】:
问题在于类型转换。您正在发送一个包含一个包含字典的值的数组,并尝试在该方法中接收一个字符串。 ASP.NET 无法将您的结构转换为 string 并使用 null 作为默认值。
因此,测试方法的简单方法是在正文中传递一个简单的字符串。但正确的做法是改变传入action方法的对象类型:
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();
}
}
【讨论】:
如果您不想反序列化正文,您可以从Request.Body 属性中读取字符串。
public Task<HttpResponseMessage> Post(int id)
{
var reader = new StreamReader(Request.Body);
var bodyString = await reader.ReadToEndAsync();
...
}
【讨论】: