发布到 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。
可以通过正确实施 async
和 await
来进一步改进这一点,但这不是必需的。
我最终是这样解决这个问题的:
var bodyStream = new StreamReader(HttpContext.Current.Request.InputStream);
bodyStream.BaseStream.Seek(0, SeekOrigin.Begin);
var bodyText = bodyStream.ReadToEnd();
感谢 joshhendo 为我提供了朝着这个方向前进所需的信息。
我正在编写一个 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。
可以通过正确实施 async
和 await
来进一步改进这一点,但这不是必需的。
我最终是这样解决这个问题的:
var bodyStream = new StreamReader(HttpContext.Current.Request.InputStream);
bodyStream.BaseStream.Seek(0, SeekOrigin.Begin);
var bodyText = bodyStream.ReadToEnd();
感谢 joshhendo 为我提供了朝着这个方向前进所需的信息。