AWS Lambda和.Net Core WebAPI的Cors错误

时间:2019-06-27 04:20:24

标签: reactjs amazon-web-services cors axios

我创建了一个.Net Core,AWS Lambda WebAPI。 在本地测试中,我遇到了CORS问题,并添加了CORS政策以允许来自我的域的来源。这工作了。该应用程序正常运行。

我需要帮助来解决部署后出现的cors问题。 部署到AWS后,我得到了众所周知的错误:


> Access to XMLHttpRequest at 'https://myLambdaEndpoint' from origin
> 'http://myWebsite' has been blocked by CORS policy: Response to
> preflight request doesn't pass access control check: No
> 'Access-Control-Allow-Origin' header is present on the requested
> resource.

这就是我所做的:

我在React中使用Axios的请求:

axios.post(`myEndpoint`, { FirstName, LastName, Email })
            .then(res => {
                if(res.errors && res.errors.length > 0) console.log(res.errors);
                else 
                {
                    this.setState({loading: false, registered: true});
                }
            })
            .catch(err => {alert(err); console.log(err)});
    } 

//Also tried

axios.post(`myEndpoint`, {headers: {'Access-Control-Allow-Origin': '*'}, FirstName, LastName, Email })
            .then(res => {
                if(res.errors && res.errors.length > 0) console.log(res.errors);
                else 
                {
                    this.setState({loading: false, registered: true});
                }
            })
            .catch(err => {alert(err); console.log(err)});
    }

在Startup.cs->配置服务

services.addCors()

// Also tried

services.AddCors(options =>
            {
                options.AddPolicy("AllowOrigin",
                builder =>
                {
                    builder.WithOrigins("http://myWebsite")
                        .AllowAnyHeader()
                        .WithMethods("POST");
                });
            });

在控制器中。

        [EnableCors(origins: "http://myWebsite", headers: "*", methods: "post")]

我的API和网站的s3 bucket cors政策

<CORSRule>
    <AllowedOrigin>myWebsite</AllowedOrigin>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

//Also tried

<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

我也尝试过在aws的lambda函数中添加触发器。

飞行前的状态代码为500。 还显示“推荐人政策:降级时不推荐人” 我想知道那是问题吗?

响应头为:

> Access-Control-Request-Headers: content-type 
> Access-Control-Request-Method: POST  
> Origin: http://myWebsite.com 
> Referer: http://myWebsite.com/

有人知道如何解决此问题吗?我花了几个小时尝试事情并完成搜索。

1 个答案:

答案 0 :(得分:0)

我解决了这个问题,不用了Google或AWS文档。

创建.net核心lambda部署时,我还需要添加一个API网关,然后对其进行正确配置。

在配置中,我需要设置用作资源的每个http方法,将其指向lambda函数,并设置其所有http状态响应。如果不这样做,api网关将无法解析cors。

希望这对其他人有帮助!