C# Asp.Net核心WebApi控制器中未正确接收DateTime属性值
我正在使用Asp.NETCore2.2WebAPI和WinForm客户端发送请求。我正在使用RestSharp库作为Restclient。WebApi控制器中似乎没有正确处理DateTime类型的属性值 源日期时间: 目标日期时间: 客户端代码:C# Asp.Net核心WebApi控制器中未正确接收DateTime属性值,c#,json,asp.net-core,json-deserialization,C#,Json,Asp.net Core,Json Deserialization,我正在使用Asp.NETCore2.2WebAPI和WinForm客户端发送请求。我正在使用RestSharp库作为Restclient。WebApi控制器中似乎没有正确处理DateTime类型的属性值 源日期时间: 目标日期时间: 客户端代码: internal virtual void Add(T1 businessObject) { RestRequest request = new RestRequest(ManagementControllerName + @"/" + A
internal virtual void Add(T1 businessObject)
{
RestRequest request = new RestRequest(ManagementControllerName + @"/" + AddActionPrefix, Method.POST);
request.RequestFormat = DataFormat.Json;
request.AddJsonBody(businessObject);
var response = Globals.ServiceStackClient.Execute(request);
if (!response.IsSuccessful)
{
var ex = JsonConvert.DeserializeObject<AppExceptionMessage>(response.Content);
throw new ClientSideException(ex);
};
}
WebApi控制器:
[HttpPost]
[Route("Add")]
public ActionResult<T1> Add([FromBody] T1 businessObject)
{
try
{
CurrentDbStorage.StartTransaction();
var mainCmd = CurrentDbStorage.GenerateCrudInsertCommand(businessObject);
mainCmd.ExecuteNonQuery();
ProcessPostAdd(businessObject);
CurrentDbStorage.CommitTransaction();
}
catch (Exception ex)
{
CurrentDbStorage.RollbackTransaction();
var parsedEx = CurrentExceptionMgr.ParseErrorMsg(ex.Message);
return new BadRequestObjectResult(parsedEx);
};
return Ok(businessObject);
}
[HttpPost]
[路线(“添加”)]
公共操作结果添加([FromBody]T1 businessObject)
{
尝试
{
CurrentDbStorage.StartTransaction();
var mainCmd=CurrentDbStorage.GenerateCrudInsertCommand(businessObject);
mainCmd.ExecuteNonQuery();
ProcessPostAdd(businessObject);
CurrentDbStorage.CommitTransaction();
}
捕获(例外情况除外)
{
CurrentDbStorage.RollbackTransaction();
var parsedEx=CurrentExceptionMgr.ParseErrorMsg(例如Message);
返回新的BadRequestObjectResult(parsedEx);
};
返回Ok(businessObject);
}
在控制器内设置断点,它向我显示BusinessObject反序列化错误,比如DocItemDt属性值小于客户端发送的实际值。在谷歌上冲浪时,Json日期时间处理有一些问题,但是没有一个对我有帮助
感谢您的帮助。您向控制器传递了哪些值,以及您收到了哪些值?您说…像DocItemDt属性值小于客户端发送的实际值。。。这些值是什么?如果在调试器中展开
DocItemDt
,它将告诉您是本地时间还是UTC。您能否确认这两个日期都是本地日期,还是都是UTC?如果一个是本地的,另一个是UTC的,那就好了。在我的个人计算机中,一切都正常工作,但当我将WebApi和WinClient部署到物理计算机时,问题就出现了。有趣的是,这两台计算机都有相同的时区:巴库+4:00。这两个项目都部署在远程桌面上。超时4小时。你的时区是+4。我怀疑这可能有关系。但我打赌他们并非都是UTC。一个是UTC,另一个是本地(巴库+4)。只需将两者转换为UTC。
[HttpPost]
[Route("Add")]
public ActionResult<T1> Add([FromBody] T1 businessObject)
{
try
{
CurrentDbStorage.StartTransaction();
var mainCmd = CurrentDbStorage.GenerateCrudInsertCommand(businessObject);
mainCmd.ExecuteNonQuery();
ProcessPostAdd(businessObject);
CurrentDbStorage.CommitTransaction();
}
catch (Exception ex)
{
CurrentDbStorage.RollbackTransaction();
var parsedEx = CurrentExceptionMgr.ParseErrorMsg(ex.Message);
return new BadRequestObjectResult(parsedEx);
};
return Ok(businessObject);
}