当我通过 GET 请求从 AngularJS 向我的 WebApi Controller 发出 JSON 调用时,我的日期以“本地”类型传递到我的模型。这很好,我希望它如何工作。
但是,当我将方法更改为 POST 时(在 WebApi Controller 和我的 AngularJS 客户端代码上),日期是一个小时,因为 DateTime 类型现在是 UTC。日期在发送前通过 .toJSON() 序列化,在查看 GET 和 POST 请求时,通过 Chrome 的网络检查,一切看起来都一样。
如何使 DateTime Kind 在 POST 和 GET 请求中保持一致,以便它们始终是本地的?
编辑#1:
角度 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 日期对象。
本例中的“http.post”是我编写的 Angular 服务,它基本上包装了 HTTP 调用。
.NET WebAPI Controller
[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。
最佳答案
您能否在检索 DateTime 对象时将其转换为您需要的任何格式?
DateTime json = yourJsonMethod();
json = json.ToLocalTime();
关于c# - .NET WebApi 不一致的日期时间类型 POST 与 GET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25728555/