如何在角度2中获得自定义响应标头?

时间:2017-02-06 08:53:03

标签: http angular observable

我是角色2的新手,目前正在使用角度2.2.1,我已成功发布请求并获得成功响应但是当我尝试从响应中获取授权标头时我总是得到null我是否能够获得 Content-Type 标头。以下是我目前的解决方案。

service.ts登录方式:

login(model: LoginModel) {
        let requestUrl = '/someurl';
        let requestPayload = JSON.stringify(model);
        let headers = this.getHeaders(false); // ... Set all required headers       

        let options = new RequestOptions({ headers: headers }); // Create a request option

        return this.http.post(requestUrl, requestPayload, options) // ...using post request
            //.map((res: Response)) // ...and calling .json() on the response to return data
            .subscribe((res: Response) => {
                var payload = res.json();
                var authorization = res.headers.get('Authorization');
                var contentType = res.headers.get('Content-Type');                                
                console.log(payload, contentType, authorization)
            });            
    }

标题助手

getHeaders(isSecureAPI: boolean) {
        let headers = new Headers({ 'Content-Type': 'application/json', 'Accept': 'application/json' });
        if (isSecureAPI) {
            headers.append('Authorization', 'GetFromSession');
            headers.append('X-UserID', 'GetFromSession');
        }
        return headers;
    }

Fiddler track:

enter image description here

角度控制台输出 enter image description here

所以任何人都可以指导我可能做错了什么?

2 个答案:

答案 0 :(得分:11)

标题已被允许但未在CORS服务器上公开但是在服务器上添加 headers.add(“Access-Control-Expose-Headers”,“Authorization,X-Custom”); 完成了这项工作: )

答案 1 :(得分:2)

我一直在努力寻找解决方案并遇到了this

假设我正在使用Microsoft Cors WebAPI 2 Nuget package,我的WebApiConfig.cs中有以下全局配置:

...
var corsAttr = new EnableCorsAttribute("http://localhost:4200", "*", "*");
config.EnableCors(corsAttr);
...

EnableCorsAttribute构造函数接受第4个字符串参数以全局允许任何其他标头:

var corsAttr = new EnableCorsAttribute("http://localhost:4200", "*", "*", "X-Foo, X-Bar, X-Baz");