为什么Angular处理HTTP错误时headers对象为空

为什么Angular处理HTTP错误时headers对象为空,angular,asp.net-web-api,Angular,Asp.net Web Api,我的API(.Net Core)返回每个响应的相关id头。这在管道的开始和结束处进行处理,以唯一地标识与API的每个交互。如果我的应用程序抛出导致HTTP 500错误的异常,就会发生这种情况 来自.Net核心API日志的样本 2017-08-27 18:40:11.1836 | Microsoft.AspNetCore.Hosting.Internal.WebHost | INFO | 1212dcbb-b2dc-46dd-a66f-2fa3c76f13 |请求在3526.1966ms 500中

我的API(.Net Core)返回每个响应的相关id头。这在管道的开始和结束处进行处理,以唯一地标识与API的每个交互。如果我的应用程序抛出导致HTTP 500错误的异常,就会发生这种情况

来自.Net核心API日志的样本

2017-08-27 18:40:11.1836 | Microsoft.AspNetCore.Hosting.Internal.WebHost | INFO | 1212dcbb-b2dc-46dd-a66f-2fa3c76f13 |请求在3526.1966ms 500中完成

输出中的GUID是相关id,您可以在格式化消息的末尾看到最终响应代码500

角度字体脚本代码

我的Angular应用程序中的代码非常简单

    return this.http.post(
        uri,
        body)
        .map(response => {
            // TODO: Handle responses
        })
        .catch((error:any) => {
            // TODO: Handle errors                                
        });  
但是,如果服务器返回500错误,则对
错误
对象的调查将生成一个
对象,该对象为空,使我无法访问从服务器返回的任何头

我可以在Chrome开发者工具中看到响应中有标题


有没有办法在出现错误情况时访问这些标题?

这是CORS的问题。我需要在API配置中添加以下内容:

    app.UseCors(builder => builder
        .WithOrigins(
            "...",
            "...")
        .AllowAnyMethod()
        .AllowAnyHeader()
        .WithExposedHeaders("CorrelationId")
        .AllowCredentials());
注意添加了
。带有exposedheaders(“CorrelationId”)
。在添加此角点后,可以看到标题


感谢柯克·拉金和这篇帖子:

这听起来像是CORS的问题。请参阅此帖子:。您确定服务会将响应对象附加到头中吗?