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

When posting to an ApiController the 2nd parameter is null

我正在编写一个 API,它将通过 post 接收 UTF-16 编码的数据字符串,实际上是 XML。我 运行 遇到的问题是控制器方法签名中的数据参数为空。第一个参数,即 API 键就可以了。我已经阅读了 Stack Overflow 上所有我能找到的 question/answer 以及其他几个来源,但都无济于事。

这是我的控制器方法:

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

这是我的 Postman chrome 插件设置的屏幕截图:

非常感谢任何帮助。

要在 Postman 中执行此操作,您需要在 Headers 选项卡上进行设置:

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

然后在 Body 选项卡上 select Raw 选项并在 =[= 开头写入您的值27=] 符号,例如:

=mydata

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

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

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

要将其作为输入参数,数据需要具有有效格式并设置了适当的 Content-Type。有关详细信息,请参阅 this post

可以通过正确实施 asyncawait 来进一步改进这一点,但这不是必需的。

我最终是这样解决这个问题的:

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

感谢 joshhendo 为我提供了朝着这个方向前进所需的信息。