gpt4 book ai didi

c# - Web Api 中的 Post 请求中的 Request Body 为 null

转载 作者:行者123 更新时间:2023-11-30 21:50:39 24 4
gpt4 key购买 nike

我有这样一个 Action 方法

[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 header 设置为 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] 属性。

关于c# - Web Api 中的 Post 请求中的 Request Body 为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36203328/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com