发布到ApiController时,第二个参数为null

时间:2015-09-21 20:22:36

标签: c# .net model-view-controller asp.net-apicontroller

我正在编写一个API,它将通过邮件接收UTF-16编码的数据字符串,这实际上是XML。我遇到的问题是控制器方法签名中的data参数为null。第一个参数,它是API密钥就好了。我已经阅读了Stack Overflow上的每个问题/答案,我可以找到,以及其他几个来源,但无济于事。

这是我的控制器方法:

[HttpPost]
public string PostEmployeeData(string key, [FromBody]string data)
{            
    return "Emp data posted";
}

这是我的Postman Chrome插件设置的屏幕截图: enter image description here

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

如果您想获取身体的原始内容,您可以这样做:

    [HttpPost]
    public string PostEmployeeData(string key)
    {
        var data = Request.Content.ReadAsStringAsync().Result;
        return "Emp data posted";
    }

要将其作为输入参数,数据必须是具有相应Content-Type集的有效格式。有关详细信息,请参阅this post

通过正确实施asyncawait,可以进一步改善这一点,但这并不重要。

答案 1 :(得分:0)

要在Postman中执行此操作,您需要设置标题标签:

内容类型 = application / x-www-form-urlencoded

Body 标签上选择原始选项,并以 = 符号开头写下您的值,例如:

=mydata

此变量将是您的操作定义中的 data 变量。

答案 2 :(得分:0)

我最终解决了这个问题:

var bodyStream = new StreamReader(HttpContext.Current.Request.InputStream);
bodyStream.BaseStream.Seek(0, SeekOrigin.Begin);
var bodyText = bodyStream.ReadToEnd();

感谢joshhendo向我提供了我需要向这个方向前进的信息。