当前位置: 首页 > 知识库问答 >
问题:

对外部API的HTTP请求。NET,但不是React(CORS问题)

龙飞文
2023-03-14

我想向外部API发出HTTP Post请求,但当我试图从React with axios执行此操作时,我遇到了CORS错误(请求的资源上不存在“Access Control Allow Origin”头)。同时,在.NET中发出此请求时,一切似乎都正常。我不知道为什么会这样,也许有人能弄明白。

响应请求:

var bodyFormData = new FormData();
    bodyFormData.append('key', 'apiKey');
    bodyFormData.append('function', 'getTeams');

    async function fetchData() {
        await axios({
            url: 'https://external.api/api/',
            method: 'POST',
            data: bodyFormData,
            withCredentials: true,
            headers: {
                'Content-Type': 'multipart/form-data',
                'Access-Control-Allow-Origin': '*',
                'Access-Control-Allow-Methods': 'GET,PUT,POST,DELETE,PATCH,OPTIONS',
                'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept'
            },
        })
            .then((response) => {
                console.log(response)
            })
            .catch((err) => {
                console.log(err)
            });
    }
    fetchData();

...NET请求:

var request = (HttpWebRequest)WebRequest.Create("https://external.api/api/");

        var postData = "key=apiKey";
        postData += "&function=getTeams";
        var data = Encoding.ASCII.GetBytes(postData);

        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        request.ContentLength = data.Length;

        using (var stream = request.GetRequestStream())
        {
            stream.Write(data, 0, data.Length);
        }

        var response = (HttpWebResponse)request.GetResponse();

        var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

共有1个答案

卫昊东
2023-03-14

CORS是一种仅适用于客户端(浏览器)的安全措施。无论您是否需要,浏览器都会发送Origin标头,API会检查标头,以决定它是否应该为您服务(通过允许浏览器继续执行主请求)。

您可以从后端无问题地发送请求,因为没有Origin头。

所以你有两个选择:

  • 从后端代理API调用
  • 要求API允许来自应用程序源的请求https://$domain:$port

如果API在您的控制之下,这应该很容易,如果不是,代理是一个更简单的解决方案。

  • CORS—它是客户端的东西、服务器端的东西还是传输级的东西?
 类似资料:
  • 这个项目的目标是使用IBM的Watson及其自然语言理解AI。

  • 问题内容: 我想要的是从具有HTTP(例如jQuery的AJAX)请求的API到外部api的对象。我该如何开始?我曾对Google先生进行过调查,但找不到任何帮助。 我开始怀疑这是否可能?在这篇文章中,Laravel4发出了从控制器到外部url的发布请求,并发出了看起来可以完成的数据。但是没有示例,也没有任何来源可以找到一些文档。 请帮帮我吗? 问题答案: 看看Guzzle

  • 我想要的是从一个API获取一个对象,并将HTTP(例如,jQuery的AJAX)请求发送到一个外部API。我该怎么开始?我对谷歌先生做了研究,但没有发现任何有用的东西。 我开始怀疑这是可能的吗?在这篇文章Laravel 4使后请求从控制器到外部url与数据它看起来像是可以做到的。但是没有例子也没有任何来源可以找到一些留档。 请帮帮我?

  • 我有一个配置为使用WINDOWS AUTHENTICATION的webapi。 在我的angular应用程序中,我有以下方法: 让方法完美地工作。 POST方法给了我以下错误: 最后介绍了webapi方法 还有我们几个小时来一直在努力的那个该死的错误: 无法加载XMLHttpRequesthttp://a.b.com/api/Contactos.对飞行前请求的响应未通过访问控制检查:请求的资源上不

  • 我试着描述一下我们的情况: 我们有一个Wordpress网站,需要连接到Oath2 API 我对API和PHP的使用经验很少 我们正在使用一个PHP-Oath2库,可以在这里找到:https://github.com/adoy/PHP-OAuth2/tree/master/src/OAuth2 我们卡住的库中的方法是 executeRequest。这种方法可以在 https://github.co

  • 我试图在Flutter应用程序中使用AWS DynamoDB,由于缺乏官方的AWS Dart SDK,我被迫使用低级别的HTTP REST API。 签署AWS HTTP请求的方法非常繁琐,但使用AWS提供的示例作为指导,我能够相对轻松地将Python转换为Dart。最终结果是两组代码产生相同的身份验证签名。 当我真的去发送请求时,我的问题来了。Python的工作原理与预期一致,但使用Dart的H