Prečo z odpovede nemám prístup ku VŠETKÝM hlavičkám v Angular2?
Mám starú webovú službu, ktorú nemôžem zmeniť. Odosiela niektoré dôležité informácie späť klientovi v systéme Windows Záhlavia odpovedí, Nepýtaj sa ma, prečo.
môj kód je tento:
.subscribe((r: Response) => {
var customHeader = r.headers.get("Database-Deleted");
var allHeadersAsString = JSON.stringify(r.headers);
ale zdá sa, že odpoveď obsahuje iba niekoľko hlavičiek, nie všetky.
Môže mi niekto povedať, že je to zámerne a neexistuje spôsob, ako k nim získať prístup? (alebo ešte lepšie: povedzte mi, ako to dosiahnuť)
UPDATE
Vďaka najvyšším komentárom som to dokázal identifikovať ako problém CORS. Prijaté odpovede na ďalšie otázky mi nedali správny kľúč.
VĎAKA!
odpovede:
2 pre odpoveď č. 1Je to naozaj Vydanie CORS, Ďakujem n00dl3 pre vás komentár!
Ak server, v tomto prípade C # WebAPI, umožňuje výslovne odhaliť vlastné hlavičky, potom mi Angular2 umožní prístup k nim.
Táto webová stránka mi pomohla: http://datawalke.com/c/webapi-owin-cors-and-custom-headers/
Riešenie
Na testovanie som bol schopný povoliť všetky pôvody a zoznam vlastných hlavičiek, ktoré potrebujem.
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);
0 pre odpoveď č. 2
V prípade, že váš back-end je ASP.net WebAPI Core, musíte postupovať nasledujúcim spôsobom
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(o => o.AddPolicy("CorsPolicy", builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader().WithExposedHeaders("X-Pagination");
}));