【问题标题】:ASP .Net Core, Cors Host vs OriginASP .Net Core、Cors Host 与 Origin
【发布时间】:2022-12-17 12:58:40
【问题描述】:

当我想添加 Cors 时,有 2 个选项。 HostOrigin

它们之间有什么区别?

    builder.Services.AddCors(options =>
    {
        options.AddPolicy("AllowOrigin", builder =>
        {
            builder
                .AllowAnyMethod()
                .AllowAnyHeader()
                .SetIsOriginAllowed(origin => true)
                .AllowCredentials();
            //or
            builder
            .AllowAnyMethod()
            .AllowAnyHeader()
            .SetIsOriginAllowed((host) => true)
            .AllowCredentials();
    
        });
    });

【问题讨论】:

  • 参数名称 :) 这在功能上没有区别。
  • .SetIsOriginAllowed(origin => true).AllowCredentials() 不安全!本质上,您是在将同源策略扔到窗外:您允许任何 Web 源强制执行经过身份验证的请求并读取其响应。相反,您应该将允许的来源集限制在最低限度。

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


【解决方案1】:

这些都是相同的。 SetIsOriginAllowed 需要一个接受字符串并返回布尔值的函数。 这两个 lambda 都是这样做的。 您可以调用参数“x”,它仍然是相同的功能。

【讨论】:

    【解决方案2】:

    这里的方法是.SetIsOriginAllowed(Func<bool,string>)

    这是一种采用带有返回布尔值的字符串参数的 lambda 的方法。如果您不熟悉 lambda,可以将它们视为非常简洁的内联函数。

    在您的问题中,hostorigin 只是该字符串参数的不同名称,您可以将其称为TheSpanishInquisition,它仍然可以相同地工作。如果您实际上没有使用该参数,我建议您使用 _ 丢弃运算符,因此它将是:

    builder
      .AllowAnyMethod()
      .AllowAnyHeader()
      .SetIsOriginAllowed(_ => true)
      .AllowCredentials();
    

    不同的括号也无关紧要。如果只有一个参数,lambda 参数周围的括号是可选的,但如果有多个参数,则括号是必需的。

    【讨论】:

      【解决方案3】:

      你可以给参数任何你想要的名字。它们没有区别

      【讨论】:

        猜你喜欢
        • 2020-05-22
        • 2018-02-24
        • 2017-10-14
        • 2019-01-24
        • 2019-03-10
        • 2017-11-12
        • 1970-01-01
        • 1970-01-01
        • 2020-04-21
        相关资源
        最近更新 更多