在查询字符串中使用点 (".") 时未设置 CORS 标头

Posted

技术标签:

【中文标题】在查询字符串中使用点 (".") 时未设置 CORS 标头【英文标题】:CORS headers not being set when using dot (".") in query string 【发布时间】:2015-12-04 14:40:13 【问题描述】:

我在这里遇到了一个奇怪而奇怪的情况。

如果我将请求发送到:/scenes/?lang=es-ar,标头设置得很好,一切似乎都正常。

但是,如果我发送一个到:/scenes/?lang=es-ar&sort.asc=creation,标头会丢失,并且由于跨源而无法获取响应。

CORS 由 Owin 的 CORS 中间件自动管理,所以这不在我的掌控之中。

这是我的中间件的配置:

private void ConfigureCors(IAppBuilder application)

    CorsPolicy policy = new CorsPolicy()
    
        AllowAnyHeader = true,
        AllowAnyOrigin = true,
        SupportsCredentials = true,
    ;

    policy.Methods.Add("GET");
    policy.Methods.Add("POST");
    policy.Methods.Add("PUT");
    policy.Methods.Add("DELETE");
    policy.Methods.Add("OPTIONS");

    policy.ExposedHeaders.Add("Location");

    application.UseCors(new CorsOptions()
    
        PolicyProvider = new CorsPolicyProvider()
        
            PolicyResolver = request => System.Threading.Tasks.Task.FromResult(policy)
        
    );

为什么没有在响应中发送标头?

我猜它与sort.asc=creation 中的"."(点)有关

我正在使用最新版本的 ASP.NET Web Api (5.2.3) 和 Microsoft.Owin.Cors (3.0.1)

【问题讨论】:

【参考方案1】:

托管服务器 IIS 可能会拦截飞行前请求。要确保 ASP.NET 处理 OPTION 请求,请在 web.config 中添加以下内容:

        <system.webServer>
          <handlers>
            <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
            <remove name="OPTIONSVerbHandler" />
            <remove name="TRACEVerbHandler" />
            <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" 
              type="System.Web.Handlers.TransferRequestHandler" 
              preCondition="integratedMode,runtimeVersionv4.0" />
          </handlers>
        </system.webServer>

在我看来,如果您打算将 IIS 用作托管环境,那么将 Microsoft.Owin.Cors 与 WebAPI 一起使用并不是一个不错的选择。对于 Asp.net WebAPi,更好的选择是 Asp.net web API implementation of CORS。

【讨论】:

以上是关于在查询字符串中使用点 (".") 时未设置 CORS 标头的主要内容,如果未能解决你的问题,请参考以下文章

如何在 bigquery 中查询数组?

LINQ / EF Core 不能在查询中使用 string.Contains

php怎么将mysql查询的数组中 的(数字)字符串类型转为数字类型

KdTree && Octree 原理学习对比以及可视化分析--"索引树"

java路径字符串中的一个点代表啥意思 例如 File path = new File("."); 这个点代表啥意思

mysql 模糊查询