Web API无法处理我不知道我发送的参数?

时间:2013-09-07 03:35:03

标签: asp.net-mvc jquery knockout.js asp.net-web-api

因此,我的闪亮的新“单页应用程序”正在陷入困境,因为以下API调用导致似乎的500错误:/api/fuel/?_=123123123123。这对我来说非常令人惊讶,因为我无法想象为什么应用程序会像这样开始进行API调用;在我的控制器上的任何地方都没有这样的参数,我当然不建议任何人要求提供该表格的URL。

页面加载其viewmodel时发生错误。它应该是从数据库加载项目并通过ajax调用将它们分流回Jock回到Knockout.js以在某处粘贴到某些HTML中;有一个很多的代码涉及到我写的几乎没有,所以......

有没有人见过这个?有谁知道这个荒谬的长号来自何处以及为什么它会被添加到我的网址上?这甚至是我正在寻找的机器人吗?

更新:

我破解了开放的Fiddler并且看起来就像问题可能是A)与传递的参数无关(是会话ID还是验证令牌或者像那样的废话?)。我得到的500响应还包括一些关于他们如何只想要无参数构造函数的gobbledygook。看起来我可能需要再看看我的模型?

更新2:

好吧,也许你们知道这件事即将到来,但我无法相信是什么解决了这个问题:显然,Web API不喜欢你从IOrderedQueryable(或类似的东西)中选择。();我在.OrderByDescending()之后添加了.AsEnumerable(),突然间一切都很好。

return db.FuelItems
    .Where(f => 
        f.UserId == cachedUserId
        //&& f.Date >= startDate 
        //&& f.Date < endDate)
        )
    .OrderByDescending(f => f.Date)
    .AsEnumerable()
    .Select(f => new FuelItemDto(f));

1 个答案:

答案 0 :(得分:3)

通过ajax调用添加_=....以防止响应被缓存。数字部分是时间戳(以毫秒为单位),因此它总是会改变。假设_永远不会成为查询字符串中的真实参数,因此它不会影响您的请求。但是,它保证查询字符串始终不同,这可以防止浏览器缓存它。

请参阅:http://api.jquery.com/jQuery.ajax/,有关缓存选项的部分。