不使用jsonp的AJAX跨域请求到WCF服务

时间:2013-06-21 23:11:49

标签: ajax json wcf

我正在使用WCF服务,目前它被Silverlight应用程序使用。 WCF服务具有clientaccesspolicy.xml和crossdomain.xml,这就是为什么即使请求来自不同的域,从Silverlight发出请求也没有问题。

现在我的理解是,在使用.net 4.0或更高版本构建的WCF服务的Web配置中添加以下代码行允许使用jsonp

进行跨域请求

<standardendpoint crossdomainscriptaccessenabled="true">

但是,jsonp无法解决我的问题,因为我需要添加jsonp不允许的自定义请求标头,因为它实际上并没有生成XMLHttpRequest。

我想知道,如果我使用以下代码片段编辑WCF服务的global.asax,我能否成功制作AJAX跨域请求?

protected void Application_BeginRequest(object sender, EventArgs e)
{
    EnableCrossDomainAjaxCall();
}

private void EnableCrossDomainAjaxCall()
{
  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", "Content-        Type, Accept");
   HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
   HttpContext.Current.Response.End();
  }
}

请注意我在部署WCF项目时遇到问题,所以我只是想知道我采取了正确的方法。

1 个答案:

答案 0 :(得分:2)

protected void Application_BeginRequest(object sender, EventArgs e)
{
    EnableCrossDomainAjaxCall();
}

private void EnableCrossDomainAjaxCall()
{
  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", "Content-Type, Accept, Foo");
  HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
  HttpContext.Current.Response.End();
 }

}

做了这个伎俩。

在我的情况下,我还必须添加一个名为Foo的自定义标头作为示例,因为我必须从客户端传递它。

希望它有所帮助!