Angular2:如何获取自定义响应头(CORS问题)
为什么我不能从响应中访问Angular2中的所有标题? 我有一个无法修改的遗留Web服务。 它在响应头中将一些重要信息发送回客户端。别问我为什么。这是废话 我的代码是: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); 但是响应似乎
.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相关问题,是否有明确允许的方法?必须检查