【问题标题】:Request Body is null in Post request in Web ApiWeb Api 中的 Post 请求中的请求正文为空
【发布时间】:2020-04-03 15:30:32
【问题描述】:

我有一个这样的操作方法

[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() 方法中,一切正常。

【问题讨论】:

  • 尝试在参数前添加[FromBody]属性
  • 试过了,但没有运气。 :(
  • 请说明您是如何提出请求的。
  • 也显示 DeviceRegistration 类
  • @EmdadulSawon,可以肯定的是,这是完整的课程吗?你没有装饰[serializable] 对吧?如果您实现 DelegatingHandler 可能会有所帮助,这样您就可以拦截请求/响应并查看它的确切外观。

标签: c# post asp.net-web-api2


【解决方案1】:

鉴于您所展示的内容,这应该适用于对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] 属性。

【讨论】:

    猜你喜欢
    • 2019-06-26
    • 2018-06-16
    • 2021-03-20
    • 1970-01-01
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多