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

根据官方文档,Asp.net Core 3.0 CORS 无法正常工作

在 asp.net core 中启用 CORS