Angular2:如何获取自定义响应头(CORS问题)

Angular2:如何获取自定义响应头(CORS问题),angular,response-headers,Angular,Response Headers,为什么我不能从响应中访问Angular2中的所有标题? 我有一个无法修改的遗留Web服务。 它在响应头中将一些重要信息发送回客户端。别问我为什么。这是废话 我的代码是: .subscribe((r: Response) => { var customHeader = r.headers.get("Database-Deleted"); var allHeadersAsString = JSON.stringify(r.headers); 但是响应似乎

为什么我不能从响应中访问Angular2中的所有标题?

我有一个无法修改的遗留Web服务。 它在响应头中将一些重要信息发送回客户端。别问我为什么。这是废话

我的代码是:

      .subscribe((r: Response) => {
      var customHeader = r.headers.get("Database-Deleted");
      var allHeadersAsString = JSON.stringify(r.headers);
但是响应似乎只包含几个标题,而不是全部

有人能告诉我这是设计的,没有办法访问它们吗? (或者更好:告诉我如何让它工作)

更新

感谢上面的评论,我能够将其确定为CORS问题。其他问题的公认答案并没有给我正确的线索


谢谢

这确实是一个CORS问题。感谢您的评论

如果服务器(在本例中是C#WebAPI)明确允许公开自定义头,那么Angular2允许我访问它们

这个网站帮助我:

解决方案

为了进行测试,我可以允许所有来源并列出我需要的自定义标题

    var att = new EnableCorsAttribute("*", "*", "*");
    att.ExposedHeaders.Add("Database-Deleted");
    att.ExposedHeaders.Add("Database-AlreadyDeleted");
    att.ExposedHeaders.Add("Database-DryRun");
    att.ExposedHeaders.Add("Database-Inserted");
    att.ExposedHeaders.Add("Database-Updated");
    config.EnableCors(att);

如果后端是ASP.net WebAPI核心,则必须按照以下方法执行

  public void ConfigureServices(IServiceCollection services)
    {

        services.AddCors(o => o.AddPolicy("CorsPolicy", builder =>
        {
            builder.AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader().WithExposedHeaders("X-Pagination");
        }));

可能重复的请查看答案中的“跨源资源共享规范”:“规范禁止访问除简单响应头字段以外的任何响应头字段(即缓存控制、内容语言、内容类型、过期、上次修改和Pragma)“如果是CORS相关问题,是否有明确允许的方法?必须检查