ASP.NET Core Cors 已启用但无法正常工作
Posted
技术标签:
【中文标题】ASP.NET Core Cors 已启用但无法正常工作【英文标题】:ASP.NET Core Cors is enabled but not working 【发布时间】:2020-10-07 13:48:42 【问题描述】:我正在尝试在我的 ASP.NET Core Web API 中实施 CORS 策略。
我的 Startup.cs 文件如下:
public void ConfigureServices(IServiceCollection services)
options.AddPolicy("AllowSpecificOrigin", builder => builder.WithOrigins("https://google.com")
.AllowAnyMethod()
.AllowAnyHeader()
.AllowAnyOrigin());
services.AddMvc()
.AddApplicationPart(Assembly.Load(new AssemblyName("Proxy.Api.Application")))
.AddJsonOptions(options =>
options.JsonSerializerOptions.WriteIndented = true;
);
services.AddControllers();
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
if (env.IsDevelopment())
app.UseDeveloperExceptionPage();
app.UseRouting();
app.UseCors("AllowSpecificOrigin");
app.UseEndpoints(endpoints =>
endpoints.MapControllers();
);
我还在下面添加了控制器方法装饰器属性:
[EnableCors("AllowSpecificOrigin")]
public Task<IActionResult> GetProxy([FromQuery] ProxyParams inputRequest)
....
现在据我了解,这一行:
options.AddPolicy("AllowSpecificOrigin", builder => builder.WithOrigins("https://google.com")
将只允许https://google.com 域使用 EnableCors 属性装饰器访问我的控制器方法。
但是,当我通过 curl 或 fiddler 在本地调用 API 端点时,该方法仍然被命中并返回 200。我错过了什么?我检查了几个帖子,但我有点卡住了。
【问题讨论】:
我的应用在开发环境中运行良好,但在生产环境中却不行。我想知道你是否解决了这个问题? 【参考方案1】:您只在处理浏览器时才关心 CORS。
这意味着即使未配置 CORS,您也可以毫无问题地从控制台应用、Web 服务、CURL、桌面应用发出任何请求。
但如果您尝试在非 Google 选项卡上打开 Chrome 控制台并尝试使用 fetch API 联系您的端点:它将失败。
我不知道您的目标是什么,但这确实不是保护您的 API 的方法。
编辑 顺便说一句,如果它是一个“简单”请求(没有预检请求),比如一个简单的 GET,那么您的端点将被命中并且无论如何都会返回 200。只有浏览器会拒绝(可以通过Fiddler查看)。
有关 CORS、简单请求和预检请求的更多信息:HTTP request from Angular sent as OPTIONS instead of POST
【讨论】:
以上是关于ASP.NET Core Cors 已启用但无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
无法在 ASP.Net Core Web api 中启用 CORS
无法在 ASP.NET Core 1.0 中启用跨域请求 (CORS)
无法在面向 netcoreapp3.0 的 ASP.NET Core WebApp 中为特定 API 控制器启用 CORS
如何在 asp.net core 3.1 中为每种类型的请求启用 Cors