【问题标题】:How to add CORS on static files with HTTPOption support (.NET Core)如何在支持 HTTPOption 的静态文件上添加 CORS (.NET Core)
【发布时间】:2022-12-10 22:52:43
【问题描述】:

如何在静态文件上指定 CORS 策略并允许 HTTPOption(预检)请求?我正在尝试通过 XHR 请求将静态文件从应用程序 Y 检索到应用程序 X 中。但这会出现以下错误:

Access to XMLHttpRequest at 'Y/test.jpg' from origin 'X' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.

似乎出现的第一个问题是 HTTPOption 请求返回 404 错误。这是为什么?它在缺少控制器端点时有意义,但在这种情况下,URL 指向一个文件。

this answer 中,AspNetCoreModuleV2 似乎不知道如何处理HTTPOption。 如答案所示修改 web.config 后(从模块中删除 HTTPOption),我确实得到了 200 响应,最后一个障碍是实际的 CORS 错误本身。

因为 HTTPOption 在更改后不通过 AspNetCoreModuleV2 处理,所以我能想到的添加 CORS 标头的唯一方法是从 web.config 执行此操作。例如。:

<add name="Access-Control-Allow-Origin" value="*" />

通过这两项更改,应用程序X 可以正确加载数据。我确实认为这不是一个干净的解决方案,因为:

  • HTTPOption 将无法在特定于控制器的端点上工作,因为它已从 web.config 中过滤掉
  • CORS 标头将添加到所有请求中,而不是仅添加到静态文件中
  • 未使用 .NET Core CORS (AddCors/UseCors)

【问题讨论】:

    标签: c# .net-core cors


    【解决方案1】:

    您可以通过在 ConfigureServices 方法中将以下代码添加到 Startup.cs 文件来为静态文件指定 CORS 策略:

    services.AddCors(options =>
    {
        options.AddPolicy("AllowAll",
            builder =>
            {
                builder.WithOrigins("*")
                       .WithMethods(new string[] { "GET", "POST", "PUT", "DELETE" })
                       .WithHeaders(new string[] { "*" });
            });
    });
    

    然后,您可以通过将以下代码添加到 Startup.cs 文件中的 Configure 方法来为您的应用程序启用 CORS:

    app.UseCors("AllowAll");
    

    这将允许正确处理 HTTPOption 请求,并将 CORS 策略仅应用于静态文件。如果要将策略应用于特定路径或控制器,可以使用 WithOrigins、WithMethods 和 WithHeaders 方法来指定允许的来源、HTTP 方法和标头。

    无需修改 web.config 文件即可以这种方式启用 CORS。 .NET Core CORS 中间件是一种更灵活和可维护的解决方案,用于处理应用程序中的 CORS。

    【讨论】:

    • 谢谢您的回答。 AddCors 无效,因为 IIS 预先拒绝了 HTTPOption,这意味着未使用配置的 CORS 设置。通过 web.config 处理 HTTPOption 的缺点是,您还要在其中指定 CORS。
    猜你喜欢
    • 2017-05-31
    • 1970-01-01
    • 2017-05-25
    • 2021-07-22
    • 1970-01-01
    • 2017-07-01
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多