【发布时间】: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