【问题标题】:Can't get ISO-8601 JSON DateTime to properly send in GET无法在 GET 中正确发送 ISO-8601 JSON DateTime
【发布时间】:2015-11-27 04:12:11
【问题描述】:

我有一个正在使用的 KnockoutJS 视图模型,显然很难将 JSON 日期作为 GET 请求中的参数发送到 WebAPI。

我的请求发生了以下情况

var params = {
    userId: currentUser, 
    startRange: ko.toJSON(self.selectedDate()),
    endRange: ko.toJSON(self.selectedDate())
}

$.ajax({
    type: "GET",
    contentType: 'application/json; charset=utf-8',
    cache: false,
    dataType: 'json',
    url: url,
    data: params, 
    beforeSend: function (xhr, settings) {
        sf.setModuleHeaders(xhr);
    }
}).done(function(data) {

}).fail(function () {

}).always(function() {

});

在我的 WebAPI 控制器上,开始日期和结束日期一直为空

public HttpResponseMessage GetViolationsInRange(int userId, DateTime? startRange, DateTime? endRange)

检查请求,这是它的输出

/API/Cert/GetViolationsInRange?userId=20&startRange=%222015-09-01T04%3A00%3A00.000Z%22&endRange=%222015-09-01T04%3A00%3A00.000Z%22

任何想法为什么会发生这种情况以及为什么我一直被这个绊倒?

编辑:似乎通过不使用 jQuery 的 AJAX 'data' 参数,而只是将值附加到 URL,它不会转义 JSON 表示。有没有一种干净的方法来做 jQuery 添加 GET 参数而不手动附加它们的事情?

【问题讨论】:

  • 为什么在 URL 中有 %22 部分(转义引号)?你试过删除它们吗?
  • 当 GET 发生时,这就是它所经历的。带有“params”对象的 $.ajax 转义到那个地方。我假设这也是日期为空的原因。
  • 好吧,而不是假设它,我会使用更预期的 URL 手动尝试它 - 然后如果它有效(我希望它会)你可以努力改变 AJAX 以避免转义。
  • 我认为使用 POST 方法而不是 GET 方法你不会遇到这个问题

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


【解决方案1】:

尝试删除 ko.toJSON()。 日期将是您的 params 对象的属性。

带有 dataType : 'json' 的 Jquery 将正确翻译日期对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多