[英]Request Body is null in Post request in Web Api
我有一个这样的动作方法
[ResponseType(typeof(DiaryDeviceDTO))]
[HttpPost]
[Route("api/Device/Register")]
public async Task<IHttpActionResult> Register(DeviceRegistration deviceRegistration)
{
if (deviceRegistration == null)
{
return BadRequest("Request body is null");
}
DiaryDevice device = await _deviceBl.Register(deviceRegistration.RegistrationCode);
var deviceDto = Mapper.Map<DiaryDevice, DiaryDeviceDTO>(device);
return Ok(deviceDto);
}
当我从PostMan用下面的请求正文调用这个 api 时,我得到deviceRegistration
对象为null
。 我还将ContentType
标头设置为application/json
{
"ApiKey" : "apikey",
"RegistrationCode" : "123",
"ImeiNo" : "12345"
}
然后我尝试阅读请求内容如下-
string body = await Request.Content.ReadAsStringAsync();
这次我也得到了body = ""
但是当我运行我的单元测试时,我得到了我想要的deviceRegistration
。 那么我的代码有什么问题。 为什么我的代码只适用于单元测试。 我正在使用 Web Api 2.2
很抱歉问这个问题。 其实是我的错。 我不小心读取了Application_BeginRequest()
方法中的请求正文以进行日志记录。 我将这些日志代码移到Application_EndRequest()
方法中,一切都变好了。
鉴于您所展示的内容,这应该适用于对api/device/register
的请求
[ResponseType(typeof(DiaryDeviceDTO))]
[HttpPost]
[Route("api/Device/Register")]
public async Task<IHttpActionResult> Register([FromBody]DeviceRegistration deviceRegistration)
{
if (deviceRegistration == null)
{
return BadRequest("Request body is null");
}
DiaryDevice device = await _deviceBl.Register(deviceRegistration.RegistrationCode);
var deviceDto = Mapper.Map<DiaryDevice, DiaryDeviceDTO>(device);
return Ok(deviceDto);
}
请注意 [FromBody] 属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.