【问题标题】:Web API can't handle parameter I didn't know I was sending?Web API 无法处理我不知道我发送的参数?
【发布时间】:2013-09-11 05:47:25
【问题描述】:

所以,我闪亮的新“单页应用程序”由于 似乎 由以下 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));

【问题讨论】:

  • 没有看到 ajax 查询很难说是什么导致了这个问题。您的 FuelController 的 Get 方法需要哪些参数?
  • 无。 (虽然有两种 GET 方法——这本身有问题吗?第二种是在寻找 ID,但第一种根本不需要任何东西。)
  • 能贴出代码吗?
  • 我会发布您喜欢的任何特定代码,但这是新的 MVC 模板之一,我们正在讨论...嗯,总共大约一千行?
  • @archer884 不,这应该不是问题。我最好的猜测是,开发 JavaScript 代码的人并没有为您的 API 方法构建正确的 URL。对于任何带有“$.ajax”的东西,在 js 代码中快速 Ctrl+F 可能是一个不错的起点。

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


【解决方案1】:

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

参见:http://api.jquery.com/jQuery.ajax/,关于 cache 选项的部分。

【讨论】:

    猜你喜欢
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 2015-03-21
    相关资源
    最近更新 更多