ASP.NET Core AWS 无服务器和 CORS
Posted
技术标签:
【中文标题】ASP.NET Core AWS 无服务器和 CORS【英文标题】:ASP.NET Core AWS Serverless and CORS 【发布时间】:2020-03-17 17:40:50 【问题描述】:我正在使用 Visual Studio 将 ASP.NET Core 2.1 应用程序发布到 AWS Lambda(无服务器)。无论我尝试了什么,我都无法让 CORS 工作。
我真正想做的就是将标题access-control-allow-origin
全局添加到我的网络应用程序中。
有没有人成功地将标头添加到 ASP.NET Core 2.1 无服务器应用程序?
Startup.cs
public void ConfigureServices(IServiceCollection services)
// AddCors must be before AddMvc
services.AddCors();
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
);
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
// UseCors must be before UseMvc
app.UseCors(builder => builder
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials()
);
// Also tried this
// app.UseCors(
// o => o.WithOrigins("http://example.com").AllowAnyMethod()
//);
app.UseMvc();
没有向我的页面添加 CORS 标头。我正在使用 Chrome 开发工具来检查我的标题。我应该在主页上看到它们(例如)正确吗?
有什么想法吗?我快死在这里了。谢谢!
编辑
此应用程序仅使用 API Gateway、Lambda 和其他一些服务。这很棒,因为只有当有人点击我的应用程序时才会向我收费。没有按小时收费。没有令人惊叹的 EC2 或 ELB。
另外,我几乎把这个添加到我原来的帖子中。 article @sturcotte06 引用有一个陷阱。
API 网关(自动生成)在代理集成中使用 ANY 方法。上面的文章是这么说的……
重要
将上述说明应用于代理集成中的 ANY 方法时,将不会设置任何适用的 CORS 标头。相反,您的后端必须返回适用的 CORS 标头,例如 Access-Control-Allow-Origin。
啊!所以它说我必须在后端执行此操作(Startup.cs 对吗?),这正是发布时似乎被忽略的内容。
【问题讨论】:
我不确定,但无服务器的整个想法不就是没有服务器吗? ELB 应该添加 CORS 标头,而不是您的应用程序。就像,如果你的项目中有 asp.net 核心,这意味着你有一个主机,这意味着你是服务器的。您甚至可以看到IHostingEnvironment
出现在您的应用中...
VS 只是创建了一堆 Lambda 代码。不知何故,它神奇地转换了相当复杂的 C# 并且它可以正常工作。我认为通过 Startup.cs 添加标头应该没有什么不同。
删除AllowCredentials()
后检查?另外,您在AddMvc
通话期间添加了CompatibilityVersion
吗?
@user1672994,我一直在使用 CompatabilityVersion 并尝试了 UseCors 的几种变体。我在上面更新了我的源代码。谢谢
尝试在控制器中添加任意标题。我很确定来自 lambda 的响应是一个对象,而不是 HTTP 响应。弹性负载均衡器负责将 HTTP 响应发送回客户端。如果我是你,我会寻找 CORS 的 ELB 配置。 (或云端或任何处理 lambda 流量的 Web 服务器)
【参考方案1】:
无论出于何种原因 app.UseCors 在我的场景中都不起作用。但是,app.Use 确实...
app.Use((context, next) =>
context.Response.Headers["Access-Control-Allow-Origin"] = "https://example.com";
return next.Invoke();
);
app.UseMvc();
【讨论】:
以上是关于ASP.NET Core AWS 无服务器和 CORS的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ASP.NET (Core 2) Web 应用程序中访问来自 AWS 的认证?
AWS负载均衡器后面的ASP.NET Core 2.1 HTTPS重定向?
打包 SF 无状态 ASP.NET Core Web 应用程序后缺少代码