Angular2:如何获得自定义响应 headers(CORS 问题)
Angular2: how to get custom response headers (CORS issue)
为什么我不能从响应中访问 Angular2 中的所有 headers?
我有一个无法修改的遗留网络服务。
它在 响应 headers 中将一些重要信息发送回客户端。不要问我为什么。这是废话。
我的代码是这样的:
.subscribe((r: Response) => {
var customHeader = r.headers.get("Database-Deleted");
var allHeadersAsString = JSON.stringify(r.headers);
但似乎响应只包含一些 headers,而不是全部。
有人可以告诉我这是设计使然,无法访问它们吗?
(或者更好:告诉我如何让它工作)
更新
感谢上面的评论,我能够将其识别为 CORS 问题。其他问题的接受答案没有给我正确的线索。
谢谢!
确实是 CORS 问题。谢谢n00dl3的评论!
如果服务器(在本例中为 C# WebAPI)允许显式公开自定义 headers,那么 Angular2 允许我访问它们。
这个网站帮助了我:
http://datawalke.com/c/webapi-owin-cors-and-custom-headers/
解决方案
为了测试,我能够允许所有来源并列出我需要的自定义 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);
如果你的后端是ASP.net WebAPI Core,你必须按照以下方式
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(o => o.AddPolicy("CorsPolicy", builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader().WithExposedHeaders("X-Pagination");
}));
为什么我不能从响应中访问 Angular2 中的所有 headers?
我有一个无法修改的遗留网络服务。 它在 响应 headers 中将一些重要信息发送回客户端。不要问我为什么。这是废话。
我的代码是这样的:
.subscribe((r: Response) => {
var customHeader = r.headers.get("Database-Deleted");
var allHeadersAsString = JSON.stringify(r.headers);
但似乎响应只包含一些 headers,而不是全部。
有人可以告诉我这是设计使然,无法访问它们吗? (或者更好:告诉我如何让它工作)
更新
感谢上面的评论,我能够将其识别为 CORS 问题。其他问题的接受答案没有给我正确的线索。
谢谢!
确实是 CORS 问题。谢谢n00dl3的评论!
如果服务器(在本例中为 C# WebAPI)允许显式公开自定义 headers,那么 Angular2 允许我访问它们。
这个网站帮助了我: http://datawalke.com/c/webapi-owin-cors-and-custom-headers/
解决方案
为了测试,我能够允许所有来源并列出我需要的自定义 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);
如果你的后端是ASP.net WebAPI Core,你必须按照以下方式
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(o => o.AddPolicy("CorsPolicy", builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader().WithExposedHeaders("X-Pagination");
}));