发布正文并返回 401 时,Expo 获取无法解析

问题描述 投票:0回答:1

这让我难住了。我正在做以下工作:

  const testFetch = () => {
    console.log("testFetch");
    fetch(`${baseurl}/${requrl}`, {
      method: "POST",
      body: JSON.stringify({ foo: "bar" }),
      headers: {
        "Content-Type": "application/json; charset=utf-8",
        Accept: "*/*",
        "Cache-Control": "no-cache",
      },
    })
      .then((response) => {
        console.log("response", response);
      })
      .catch((err) => {
        console.log("error", err);
      });
  };

服务器将为此调用返回 401 Unauthorized。这个承诺在 iOS 中永远不会实现(在 Android 中却会实现)。 IE。我从来没有得到响应或错误日志记录。在我看来,这里变得很奇怪:

  • 当我删除主体有效负载时,承诺就解决了
  • 当我将 url 更改为不存在的路径时,promise 会解析(未找到 404)

我正在使用 Expo 15.0.7 和 React Native 0.74.2。我尝试过 Axios、Apisauce 和 XMLHttpRequest,但没有成功。通过邮递员我得到了完美的答复。这与cors无关。这种情况发生在 iOS 模拟器和 iOS 设备上的 Expo Go 上。 Android 设备对于此代码没有任何问题。我花了超过 24 小时进行调试,现在我转向你了。感谢您的宝贵时间。

ios react-native expo fetch-api
1个回答
0
投票

我找到了这个错误的原因。服务器 (IIS) 启用了基本身份验证和摘要身份验证,并在响应中包含 www-authenticate 标头,因为代码返回 401。要认识到的重要一点是,如果发生这种情况,fetch/axios/apisauce/etc 将挂起iOS 并没有解决。我只能猜测为什么。可能是因为它在到达 React Native 代码之前被拦截,并且其他一些逻辑尝试处理身份验证。

© www.soinside.com 2019 - 2024. All rights reserved.