我创建了一个.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/
有人知道如何解决此问题吗?我花了几个小时尝试事情并完成搜索。
答案 0 :(得分:0)
我解决了这个问题,不用了Google或AWS文档。
创建.net核心lambda部署时,我还需要添加一个API网关,然后对其进行正确配置。
在配置中,我需要设置用作资源的每个http方法,将其指向lambda函数,并设置其所有http状态响应。如果不这样做,api网关将无法解析cors。
希望这对其他人有帮助!