fetch() 在 react-native (iOS) 上做 GET 而不是 POST

Posted

技术标签:

【中文标题】fetch() 在 react-native (iOS) 上做 GET 而不是 POST【英文标题】:fetch() doing GET instead of POST on react-native (iOS) 【发布时间】:2016-08-11 15:58:56 【问题描述】:

我的组件中有以下代码:

fetch('https://domain.com/api', 
  method: 'POST',
  headers: 'Accept': 'application/json', 'Content-Type': 'application/json',
  body: JSON.stringify(
    key: 'value'
  )
).
  then((response) => 
    console.log('Done', response);
  );

并且每次请求都是 GET(检查服务器日志)。我认为这与CORS(但react-native 中显然没有这样的事情)和ATS(但默认情况下已经关闭,加上我的域是HTTPS)有关。我已经从浏览器和curl 尝试过,它运行良好,所以服务器配置先验没有问题。知道这里发生了什么吗?

我使用的是最新的react-native 版本。

【问题讨论】:

hmm,您是否使用 GET 而不是 POST 进行了一些测试?也许手机中的代码还没有用'post'更新 对我来说,它与 'post' 一起使用,小写 GET 当然可以,但它是资源的创建,所以 POST 是我需要的。我也尝试过小写,没有任何效果。我没有提到它,但我在模拟器上遇到了这个问题 【参考方案1】:

经过进一步挖掘,这绝对是 API + fetch 的问题。我在 URL 的末尾缺少一个斜杠,API 发出了 301,fetch 没有正确处理。所以我不知道 fetch 函数(和底层机制)是否有什么需要修复的,但这解决了我的问题 :)

【讨论】:

这也发生在我身上,但真正奇怪的是它只发生在我的应用程序部署到实体手机的“发布”版本中。调试版本每次都会正确发布。在路由中添加尾随“/”为我解决了这个问题。感谢您的帮助!【参考方案2】:

当一个 POST 被重定向(在我的例子中是从 http 到 https)它被转换成一个 GET。 (不知道为什么……)

【讨论】:

以上是关于fetch() 在 react-native (iOS) 上做 GET 而不是 POST的主要内容,如果未能解决你的问题,请参考以下文章

react-native——fetch

如何在带有 Jest 的 react-native 中使用模拟的 fetch() 对 API 调用进行单元测试

react-native android fetch json停止工作

在React-Native中,使用fetch时,cookie问题。

react-native fetch() cookie 持久化

POST 方法在 react-native 应用程序(Android)中不起作用(Fetch 或 Axios)