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

时间:2017-03-28 10:26:30

标签: angular response-headers

为什么我无法从响应中访问Angular2中的所有标头?

我有一个遗传的网络服务,我无法修改。 它会在响应标头中将一些i,重要信息发送回客户端。不要问我为什么。这是垃圾。

enter image description here

我的代码是:

      .subscribe((r: Response) => {
      var customHeader = r.headers.get("Database-Deleted");
      var allHeadersAsString = JSON.stringify(r.headers);

但似乎响应只包含几个标题,而不是所有标题。

有人可以告诉我这是设计上的,并且无法访问它们吗? (甚至更好:告诉我如何使它工作)

更新

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

谢谢!

2 个答案:

答案 0 :(得分:2)

确实是 CORS问题。感谢 n00dl3 为您发表评论!

如果服务器(在这种情况下是C#WebAPI允许显式公开自定义标头),那么Angular2允许我访问它们。

这个网站帮助我: http://datawalke.com/c/webapi-owin-cors-and-custom-headers/

<强>解决方案

为了测试,我能够允许所有来源并列出我需要的自定义标题。

    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);

答案 1 :(得分:0)

如果你的后端是ASP.net WebAPI Core,你必须采取以下方式

  public void ConfigureServices(IServiceCollection services)
    {

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