AWS Lambda 和 .Net Core WebAPI 的 Cors 错误

IT技术 reactjs amazon-web-services axios
2021-05-02 17:24:29

我创建了一个 .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");
                });
            });

在控制器.cs

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

我的 API 和网站的 s3 存储桶 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。还说“Referer Policy: no-referer-when-downgrade”我想知道这是否是问题所在?

响应头是:

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

有人知道怎么修这个东西吗?我花了几个小时尝试事物并完成搜索。

2个回答

只是想在一整天之后添加这个问题(.NET Core 5 lambda 函数)。不要在源域末尾添加“/”。不要这样做:

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

应该是这样的:

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

我知道他们在这个问题上没有这样做,但我非常希望如果他们犯了同样的愚蠢错误,这可以为其他人在未来节省一些时间。

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

当我创建 .net core lambda 部署时,我还需要添加一个 API 网关,然后正确配置它。

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

希望这对其他人有帮助!