gpt4 book ai didi

ruby-on-rails - AFNetworking HTTPClient 从 Rails JSON 服务接收 406

转载 作者:行者123 更新时间:2023-11-29 04:32:55 36 4
gpt4 key购买 nike

我正在构建一个 iOS 应用程序来使用由 Rails 3.x 应用程序提供的 Web 服务;具体来说,我希望从 Controller 接收 JSON 响应,该 Controller 使用此 block 响应简单的 GET 请求。

# after some data calls...

respond_to do |format|
format.json { render :json => some_object }
format.xml { render :xml => some_object }
end

在我的 iOS 应用程序中,我使用 AFNetworking 库创建 AFHTTPClient 的子类来使用此服务。当我调用 GET 端点时,我收到 HTTP 406 错误 - 如果我针对本地运行的 Rails 应用程序运行此错误,我可以验证正在发送的内容。它成功地运行了所有数据调用,一旦到达 respond_to block ,它似乎就会死掉,而且我很确定问题出在 AFNetworking 的请求 header 中> 正在发送。

这是我的 HTTP 客户端为其 header 设置的内容。

[self setDefaultHeader:@"Accept" value:@"application/json"];
[self registerHTTPOperationClass:[AFJSONRequestOperation class]];

我的端点是这个...

http://localhost:3000/api/some_object.json

如果我在浏览器中调用此端点,它渲染得很好。如果我使用 iOS 应用程序调用它,则会收到 406。当我在 Rails 应用程序中添加一个断点并检查正在通过的 header 时,AFNetworking 似乎正在设置 request.format mobile — 即使 format 应为 .json(如 URL 所示)。在我的浏览器中,request.formatapplication/json,就像它应该的那样。

我尝试在 URL 的请求中手动设置此 format 选项,作为查询字符串参数...但我被难住了。什么都不起作用。我有什么遗漏的吗?我需要告诉 AFNetworking 用作请求 header 才能使其正常工作吗?我很茫然。

最佳答案

我刚刚搜索了AFNetworking源代码中没有任何地方将格式设置为 mobile,该字符串甚至一次都没有出现在源代码中。

这一定发生在 Rails 端。您是否定义了任何移动 Mime::Type 别名?在您的代码中搜索mobile,看看会出现什么结果。对于临时修复,我只需重写为

format.mobile { ... }
format.json { ... }

关于ruby-on-rails - AFNetworking HTTPClient 从 Rails JSON 服务接收 406,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11462987/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com