我正在尝试以角度方式使用WCF服务。但是得到这样的错误。
XMLHttpRequest无法加载http://localhost:50961/abc.svc/test1。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点“http://localhost:3953”访问。
请帮帮我。
感谢。
答案 0 :(得分:0)
您需要在响应中添加相关的HTTP标头,以便在WCF服务上启用CORS。这是因为您当前应用程序的域localhost:3953
与您的ajax请求的域localhost:50961
不匹配,在这种情况下,浏览器会自动向服务器发送预检请求,询问服务器是否支持CORS。实际上它要求两个HTTP头:Access-Control-Request-Method和Access-Control-Request-Headers。
为了启用CORS,首先在wcf项目的根地址中添加一个Global.asax文件,并将以下代码放在相关的.cs文件中:
public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
}
protected void Session_Start(object sender, EventArgs e)
{
string sessionID = Session.SessionID;
}
protected void Application_BeginRequest(object sender, EventArgs e)
{
var ctx = HttpContext.Current;
ctx.Response.AddHeader("Access-Control-Allow-Origin", "http://foo.com");
if (ctx.Request.HttpMethod != "OPTIONS") return;
ctx.Response.AddHeader("Cache-Control", "no-cache");
ctx.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
ctx.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
ctx.Response.AddHeader("Access-Control-Max-Age", "1728000");
ctx.Response.End();
}
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
}
protected void Application_Error(object sender, EventArgs e)
{
}
protected void Session_End(object sender, EventArgs e)
{
}
protected void Application_End(object sender, EventArgs e)
{
}
}
如果您不知道原点,可以使用*
代替http://foo.com
作为原点。有关更详尽的说明,请参阅此link。