繁体   English   中英

Web Api 中的 Post 请求中的请求正文为空

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM