【问题标题】:Applying CORS on ASP.NET Core 1.1 not working as expected在 ASP.NET Core 1.1 上应用 CORS 无法按预期工作
【发布时间】:2022-01-24 16:14:52
【问题描述】:

在 ASP.NET Core 1.1 上。

我包含了 nuget 包Microsoft.AspNetCore.Cors" Version="1.1.2

Startup.cs 的 CORS 代码如下所示。

这些是问题:

  • 问题 1:根据以下代码,CORS 已配置为 'POST',但它允许 ALL http 方法不仅限于 'POST'

  • 问题 2:CORS 已配置为仅允许“CustomHeader1”、“CustomHeader2”,但不允许允许任何请求标头,包括有效的“CustomHeader1”、“CustomHeader2”请求标头。如果我在请求中完全删除标头,那么只会收到响应。

代码:

 public IServiceProvider ConfigureServices(IServiceCollection services)
 {
     services.AddCors();
 }

 public void Configure(IApplicationBuilder app)
 {
     app.UseCors(builder => builder
                                .AllowAnyOrigin()
                                .WithMethods("POST")
                                .WithHeaders("CustomHeader1", "CustomHeader2")
                );
 }

我缺少什么只为 POST 方法配置 CORS 并在请求中只允许“CustomHeader1”、“CustomHeader2”?

【问题讨论】:

    标签: jquery asp.net-core cors cross-domain same-origin-policy


    【解决方案1】:

    .Net-Core 1.1 中,需要添加

    app.UseCors(builder => builder
        .AllowAnyOrigin()
        .WithMethods("POST")
        .WithHeaders("CustomHeader1", "CustomHeader2")
    );
    

    在调用 app.UseMvc() 和 app.UseStaticFiles() 之前。


    建议一

    如果您的 Web 应用托管在 IIS 上,请查看this link。如果你 处于开发阶段,请在您的 Startup.cs 文件中排序。

    建议二

    如果还是不行,请生成发布文件,检查是否有生成web.config文件。

    建议 3

    建议按照the official examples编码,官方代码都经过测试,可以节省不少时间。

    【讨论】:

    • @jason pan,这可行,但 无法限制 CORS 使用 .WithMethods("POST") .WithHeaders("CustomHeader1", "CustomHeader2") 会怎样是问题吗?
    • @191180rk 你的程序部署了吗?
    • @jason pan,目前我正在使用 IISexpress 从本地验证它,一旦本地测试通过,它将被部署到 Azure ServiceFabric
    • @191180rk 参考建议2,检查发布文件是否包含web.config。另外,如果是本地测试,请参考上面的链接修改。
    【解决方案2】:

    你可以试试这个语法

    public void ConfigureServices(IServiceCollection services)
    {
                ....
                services.AddCors(o => o.AddPolicy("AllowAnyOrigin", builder =>
                {
                    builder.AllowAnyOrigin()
                           .AllowAnyMethod()
                           .AllowAnyHeader();
                }));
    
                 .....
    }
    
    public void Configure(IApplicationBuilder app)
    {
                ....
    
                app.UseRouting();   
                app.UseCors("AllowAnyOrigin");
                //app.UseAuthentication();
                //app.UseAuthorization();
               ....
    }
    

    只有在可行的情况下,你才可以尝试添加一些限制。

    【讨论】:

    • @ Serge,这也有效,但 无法限制 CORS 使用 .WithMethods("POST") .WithHeaders("CustomHeader1", "CustomHeader2") 什么会是问题吗?
    • @191180rk 只有在可行的情况下,你可以尝试添加一些限制。
    • 尽管添加了限制,但未考虑限制。添加了代码 .AllowAnyOrigin() .WithMethods("POST") .WithHeaders("CustomHeader1", "CustomHeader2")。使用此代码,CORS 甚至可以用于它不应该使用的 GET 方法。
    • @191180rk Get 方法始终有效,它不需要 CORS。 POST 主要需要 Cors。你很幸运,它可以不受限制地工作。在许多情况下,它根本不起作用。恕我直言,忘记限制
    • @Serge, 1) 那么哪些方法需要 CORS? 2) 虽然使用 .WithHeaders("CustomHeader1", "CustomHeader2") CORS 应用的标题限制也适用于 "CustomHeader11234" 并且不遵守标题限制。
    猜你喜欢
    • 1970-01-01
    • 2019-08-26
    • 2018-05-03
    • 2018-06-05
    • 1970-01-01
    • 2020-10-20
    • 2019-08-18
    • 2017-07-17
    • 2020-11-14
    相关资源
    最近更新 更多