如何在Angular JS

时间:2016-03-01 21:17:53

标签: angularjs wcf http service

我正在尝试以角度方式使用WCF服务。但是得到这样的错误。

XMLHttpRequest无法加载http://localhost:50961/abc.svc/test1。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点“http://localhost:3953”访问。

请帮帮我。

感谢。

1 个答案:

答案 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