.NET WebApi不一致的DateTime类型POST与GET

本文关键字:POST GET 类型 DateTime WebApi 不一致 NET | 更新日期: 2023-09-27 18:21:16

当我通过GET请求从AngularJS向WebApi控制器进行JSON调用时,我的日期会以"本地"类型传递到我的模型中。这很好,我希望它能正常工作。

然而,当我将方法更改为POST(在WebApi控制器和AngularJS客户端代码上)时,日期会延迟一个小时,因为DateTime类型现在是UTC。日期在发送之前通过.toJSON()进行序列化,在查看GET和POST请求时,通过Chrome的网络检查,一切看起来都是一样的。

如何在POST和GET请求之间保持DateTime Kind的一致性,使它们始终是本地的?

编辑#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.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。

.NET WebApi不一致的DateTime类型POST与GET

当您检索DateTime对象时,是否可以不将其转换为所需的任何格式?

DateTime json = yourJsonMethod();
json = json.ToLocalTime();