2

因此,我闪亮的新“单页应用程序”由于似乎是由以下 API 调用引起的 500 错误而使自己陷入困境:/api/fuel/?_=123123123123. 这让我感到非常惊讶,因为我无法想象为什么应用程序一开始会进行这样的 API 调用;我的控制器上的任何地方都没有这样的参数,我当然不建议任何人要求该表单的 URL。

当页面加载其视图模型时会发生错误。它应该从数据库中加载项目,并通过 ajax 调用将它们作为 JSON 分流回 Knockout.js,以便在某处陷入某些 HTML;有很多代码涉及,我几乎没有写,所以......

有没有人见过这个?有谁知道这个长得可笑的数字是从哪里来的,为什么它会被添加到我的 URL 上?这就是我要找的机器人吗?

更新:

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

更新 2:

好吧,也许你们知道这即将到来,但我不敢相信是什么解决了这个问题:显然,Web API 不喜欢你从 IOrderedQueryable(或类似的东西)中选择 .Select();我在 .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));
4

1 回答 1

3

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

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

于 2013-09-07T04:25:02.440 回答