【发布时间】: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