简体   繁体   中英

Request Body is null in Post request in Web Api

I have a action method like this

[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);
}

When I call this api from PostMan with below request body, I get deviceRegistration object as null . I also set ContentType header as application/json

{
    "ApiKey" : "apikey",
    "RegistrationCode" : "123",
    "ImeiNo" : "12345"
}

Then I try to read the request content as below-

string body = await Request.Content.ReadAsStringAsync();

This time I also get body = ""

But when I run my Unit test I get deviceRegistration as I wanted. So what's wrong with my code. Why my code only work for unit testing. I am using Web Api 2.2

Update / Solution

Sorry for asking this question. Actually it was my mistake. I accidentally read the request body inside Application_BeginRequest() method for logging. I move those logging codes inside Application_EndRequest() method and everything becomes ok.

Given what you've shown, this should work for the requests to 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);
}

Note the [FromBody] attribute.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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