如何使用AngularJS $ http

时间:2016-11-04 17:34:09

标签: asp.net angularjs soap cors

好的,在进一步发展之前,这是在CORS情况下发生的。

服务器#1(http://localhost:33233)是我托管我的服务(SOAP,WebAPI)的主要网站。我在Global.asax中添加了这些行以支持CORS请求:

protected void Application_BeginRequest(object sender, EventArgs e)
{
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin" , "*");
    if (HttpContext.Current.Request.HttpMethod == "OPTIONS" )
    { 
        // These headers are handling the "pre-flight" OPTIONS call sent by the browser.
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST" );
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Accepts, Content-Type, Origin");            
        HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
        HttpContext.Current.Response.End();
    } 
}

此外,在该服务器上,当我收到请求时,我在标题中设置会话令牌:

HttpContext.Current.Response.Headers.Set("X-SessionToken", "{...}");

服务器#2(http://localhost:41350/login)是我使用AngularJS构建的移动网站,我称之为远程服务。

在登录过程中,我调用SingIn服务(SOAP)。我点击断点服务器端,我设置标头并返回响应;往返是有效的。

但是,当我从响应客户端检查标头时,我得到一个空值。

$http({
    method: 'POST',
    url: 'http://localhost:33233/ws/Authentication.asmx/SignIn',
    data: {...}
}).success(function(data, status, header, config) {
    var mySession = header('X-TokenSession');
}).error(function(data, status, header, config){
    ...
});

我查看了Fiddler或Chrome DevTools,我可以看到网络流量中的标头值。

这是$ httpProvider的问题吗?

1 个答案:

答案 0 :(得分:0)

最后,我找到了答案。当我返回会话令牌时,我需要“公开”它:

HttpContext.Current.Response.AddHeader("Access-Control-Expose-Headers", "X-TokenSession");