【问题标题】:Web API [FromBody] always nullWeb API [FromBody] 始终为空
【发布时间】:2020-05-05 09:27:50
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# webapi


    【解决方案1】:

    问题在于类型转换。您正在发送一个包含一个包含字典的值的数组,并尝试在该方法中接收一个字符串。 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();
        }
    }
    

    【讨论】:

    • 实际上先生它应该接收一个字符串值然后我将值反序列化为表格格式。
    • @user3035024 好的,当系统手动解析 JSON 时,这很奇怪,但是您必须将该行传递给该方法。只需将你的身体包裹到“”
    【解决方案2】:

    如果您不想反序列化正文,您可以从Request.Body 属性中读取字符串。

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

    【讨论】:

      猜你喜欢
      • 2015-11-05
      • 1970-01-01
      • 2018-12-26
      • 2015-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多