【问题标题】:ASP.NET Core Cors is enabled but not workingASP.NET Core Cors 已启用但无法正常工作
【发布时间】: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。我错过了什么?我检查了几个帖子,但我有点卡住了。

【问题讨论】:

  • 我的应用在开发环境中运行良好,但在生产环境中却不行。我想知道你是否解决了这个问题?

标签: c# asp.net asp.net-core .net-core


【解决方案1】:

您只在处理浏览器时才关心 CORS。

这意味着即使未配置 CORS,您也可以毫无问题地从控制台应用、Web 服务、CURL、桌面应用发出任何请求。

但如果您尝试在非 Google 选项卡上打开 Chrome 控制台并尝试使用 fetch API 联系您的端点:它将失败。

我不知道您的目标是什么,但这确实不是保护您的 API 的方法。

编辑 顺便说一句,如果它是一个“简单”请求(没有预检请求),比如一个简单的 GET,那么您的端点将被命中并且无论如何都会返回 200。只有浏览器会拒绝(可以通过Fiddler查看)。

有关 CORS、简单请求和预检请求的更多信息:HTTP request from Angular sent as OPTIONS instead of POST

【讨论】:

    猜你喜欢
    • 2010-12-30
    • 2011-06-16
    • 2013-05-21
    • 2011-08-12
    • 2017-02-11
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    相关资源
    最近更新 更多