来自网站客户端脚本的 WCF RESTful 服务跨域访问
Posted
技术标签:
【中文标题】来自网站客户端脚本的 WCF RESTful 服务跨域访问【英文标题】:WCF RESTful Service Cross Domain Access from Web Site Client Side Scripts 【发布时间】:2012-04-23 18:52:55 【问题描述】:我正在使用 VS 2010 IDE 开发 WCF RESTful 服务,在研究期间,我们被告知 API 将部署在站点托管的同一域中,例如。
API 托管: www.site.com/API/services.svc(API 是一个虚拟文件夹)
网站托管: www.site.com
由于我们的网站将使用我们计划在同一域中部署的客户端 ajax 使用相同的 API,因此不会出现跨域/源访问问题。
但是,稍后会发生变化,iPad、iPhone 和智能电视应用程序将使用相同的 API,因为我们计划将 API 部署在名为 www 的单独域中的 API 会有巨大的流量。 api.com/services.svc 它对所有设备应用程序的响应都很好,但是我们在网站上遇到了问题,因为它是来自客户端的跨域访问。经过搜索,我发现代码可以在 API 中破坏此跨域策略,如下所示,通过在 Global.asax 文件 Application_BeginRequest() 中实现以下代码,它在 Chrome、Firefox 和 Safari 浏览器中响应良好,但在 IE 中没有响应
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "x-requested-with");
if (HttpContext.Current.Request.HttpMethod.ToUpper() == "OPTIONS")
HttpContext.Current.Response.AddHeader("X-DR-Request-Terminated-By", "CrossDomainXhr-OPTIONS");
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
HttpContext.Current.Response.End();
请帮我解决这个问题...
提前谢谢...
萨蒂什
【问题讨论】:
【参考方案1】:据我所知,IE 不允许在
中使用“*”HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
尝试指定域。您也可以参考这里:Access-Control-Origin in IE
【讨论】:
非常感谢您的回答,它非常有帮助,请指导我如何允许多个域的 Access-Control-Allow-Origin,我尝试使用 (,) 分隔域,但它不工作以上是关于来自网站客户端脚本的 WCF RESTful 服务跨域访问的主要内容,如果未能解决你的问题,请参考以下文章