在查询字符串中使用点 (".") 时未设置 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 标头的主要内容,如果未能解决你的问题,请参考以下文章
LINQ / EF Core 不能在查询中使用 string.Contains
php怎么将mysql查询的数组中 的(数字)字符串类型转为数字类型
KdTree && Octree 原理学习对比以及可视化分析--"索引树"