【发布时间】:2023-03-17 06:47:02
【问题描述】:
当我通过 GET 请求从 AngularJS 向我的 WebApi 控制器发出 JSON 调用时,我的日期以“本地”类型传递给我的模型。这很好,我希望它如何工作。
但是,当我将方法更改为 POST(在 WebApi 控制器和我的 AngularJS 客户端代码上)时,日期是一个小时,因为 DateTime 类型现在是 UTC。日期在发送之前通过 .toJSON() 进行序列化,并且在查看 GET 和 POST 请求时,通过 Chrome 的网络检查,一切看起来都一样。
如何在 POST 和 GET 请求中保持 DateTime 类型的一致性,以便它们始终是本地的?
编辑#1:
Angular JS 调用:
var params = {
DateFrom: detail.from.toJSON(),
DateTo: detail.to.toJSON(),
Filters: detail.filters
};
return http.post(window.urls.apiGetAllErrorsGraphData, params);
在我当前的示例中,params.DateFrom = "2014-04-30T23:00:00.000Z", detail.from = 01/05/2014 作为 JS Date 对象的值。
在这种情况下,'http.post' 是我编写的一个 Angular 服务,它基本上包装了 HTTP 调用。
.NET WebAPI 控制器
[POST("api/errors/chart")]
[HttpPost]
[HttpOptions]
public IHttpActionResult GetAllErrorsGraphData([FromBody]AllErrorChartDetails details)
{
var results = chartDataService.GenerateAllErrorsData(details.DateFrom, details.DateTo, details.Filters);
return Ok(results.Select(x => new { date = x.Key, errors = x.Value }));
}
如果您对方法的属性感到好奇,我正在使用 AttributeRouting。
【问题讨论】:
-
能出示相关代码吗?
-
更新了原帖。
-
我猜这是您在 GET 请求中的日期格式。你能发布你的代码吗?
-
它和上面的一样,除了它说 POST 它会说 GET,并且控制器会有 [FromUri]。
-
你使用的是什么 JSON 序列化器?
标签: c# json datetime asp.net-web-api