2014-11-06 86 views
0

我是WCF的初学者,我一直在尝试为在我的IIS中托管的WCF服务启用CORS。我已经经历了几个帖子和Stack Overflow问题,所有的答案都让我看到了不同的解决方案,而且它们都不起作用。在wcf中启用cors -ajax

有人可以解释我如何实现这个?我尝试创建一个global.asax并添加begin_request事件来设置标题,但它没有改变。 这是我使用的:

protected void Application_BeginRequest(object sender, EventArgs e) 
     { 
      HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*"); 
      if (HttpContext.Current.Request.HttpMethod == "OPTIONS") 
      { 
       HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache"); 
       HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST"); 
       HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept"); 
       HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000"); 
       HttpContext.Current.Response.End(); 
      } 
     } 

我应该从哪里开始的这一点,这是实现这一目标的最佳途径?

+0

你有没有试过这个http://enable-cors.org/server_wcf.html? – 2014-11-06 07:45:12

+0

@MajoB是的,但我无法正确配置它,它给了我很多例外 – 2014-11-07 06:51:31

+0

您是否已将'Access-Control-Allow-Origin'添加到网络配置 – 2015-10-03 16:56:59

回答

0

我认为WCF服务已启动并running.Fix在的Web.config。新增一节中system.webServer部分。

<httpProtocol> 
<customHeaders> 
    <add name="Access-Control-Allow-Origin" value="*"/> 
    <add name="Access-Control-Allow-Headers" value="Content-Type, Accept" /> 
    <add name="Access-Control-Allow-Methods" value="POST,GET,OPTIONS" /> 
    <add name="Access-Control-Max-Age" value="1728000" /> 
</customHeaders> 
</httpProtocol> 

注意


注意! Access-Control-Allow-Origin设置被设置为值"*"。这将允许所有呼叫者有权访问。您只能指定您的主叫方。

从你现有的实现它应该工作。但是,我稍微调整了代码,它适用于我。

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin" , "*"); 
if (HttpContext.Current.Request.HttpMethod == "OPTIONS") 
{  
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods" , "GET, POST"); 
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Authorization, Origin, Content-Type, Accept, X-Requested-With"); 
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000"); 
HttpContext.Current.Response.End(); 
} 
}