axios AWS Lambda和.Net Core WebAPI的Cors错误

rn0zuynd  于 11个月前  发布在  iOS
关注(0)|答案(3)|浏览(109)

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


in the fabricer.cs

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


我的s3 bucket针对API和网站的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/


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

zysjyyx4

zysjyyx41#

只是想在一整天之后加上这个问题(.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");
            });
        });


我知道他们在这个问题上没有这样做,但我希望这可能会为将来犯同样愚蠢错误的人保存一些时间。

chy5wohz

chy5wohz2#

我解决了这个问题,这并不归功于Google或AWS文档。
当我创建the.net核心lambda部署时,我还需要添加一个API网关,然后正确配置它。
在配置中,我需要设置我用作资源的每个http方法,将其指向lambda函数,并设置其所有http状态响应。如果不这样做,API网关将无法解析cors。
希望这对其他人有帮助!

waxmsbnn

waxmsbnn3#

希望这也能帮助其他陷入此困境的人,@theArtifacts有正确的想法,但实际上您并不需要在AWS中配置API Gateway。如果您已经创建了Web API并通过CLI将其发布到Lambda,则可以进入AWS控制台,选择Lambda函数,然后选择:配置- >功能URL ->编辑,然后展开“附加设置”部分,在那里你会找到CORS策略的东西。与.NET Core中通常部署的Web API不同,如果你试图从本地机器上进行快速测试,以下内容将不起作用:

builder.Services.AddCors(option => {
     option.AddPolicy("AllCors", builder => {
         builder.AllowAnyOrigin();
         builder.AllowAnyHeader();
         builder.AllowAnyMethod();
     });
 });

字符串

相关问题