.NET WebApi Inconsistent DateTime种类POST与GET

时间:2014-09-08 16:12:15

标签: c# json datetime asp.net-web-api

当我通过GET请求从AngularJS向我的WebApi控制器发出JSON调用时,我的日期会以“本地”类型的形式进入我的模型。这很好,我希望它如何工作。

但是,当我将方法更改为POST(在WebApi控制器和我的AngularJS客户端代码上)时,日期是一小时,因为DateTime类型现在是UTC。在发送之前,日期通过.toJSON()序列化,并且在查看GET和POST请求时,通过Chrome的网络检查,所有内容看起来都相同。

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

编辑#1:

Angular JS Call:

            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。

1 个答案:

答案 0 :(得分:0)

当你将DateTime对象检索到你需要的任何格式时,你能不能只转换它?

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