我從我的應用程序中獲取來自第三方REST服務的結果。這些服務因 Request header field X-XSRF-TOKEN is not allowed by Access-Control-Allow-Headers in preflight response.
而停止,因爲angular2已將此標頭設置爲默認情況下所有請求的標準。Angular 2爲單個服務或每個請求禁用XSRFStrategy
我已經想通了如何禁用此:
import { HttpModule, XSRFStrategy } from '@angular/http';
export class NoXSRFStrategy {
configureRequest(req: Request) {
// Remove `x-xsrf-token` from request headers
}
}
@NgModule({
imports: [
HttpModule
],
declarations: [ ],
providers: [{ provide: XSRFStrategy, useFactory:() => new NoXSRFStrategy() }] // !!HACK!!
})
export class AppModule { }
但這部作品在模塊級,這意味着無論哪個服務爲他們提供了它禁用此爲所有請求。
我想要的是爲我自己決定哪個Http調用應該被剝離這樣的頭文件並且可以繼續使用它們。使用上面的解決方案,我必須在單獨的模塊中隔離該服務,並且僅對該模塊使用NoXSRFStrategy
。我沒有在其他模塊中與其他服務一起測試過,但我希望這不會將NoXSRFStrategy
設置爲全局請求配置。
只是爲了說明,我想什麼是可能的:
@Injectable()
export class MyService {
constructor(private http: Http) { }
apiCall() {
return this.http.get('some.online/service.json', {useXsrf: false}); // ...or something... IDK
}
也許服務水平:
@Injectable()
export class MyService {
constructor(private http: Http) {
this.http.setXsrfStrategy(NoXSRFStrategy); // For only this http instance...
}
有誰知道是否有禁用X-XSRF-的任何方式TOKEN標題除了設置模塊級別配置?
在這裏有相同的問題。你能解決它嗎? – Sebastian
我不想爲我的整個應用程序在全局範圍內設置它,並最終放置了一個小型NodeJS Express服務器來處理我的角應用程序和第三方服務器之間的對話。但是如果你不關心爲你的應用程序所做的所有請求移除X-XSRF-TOKEN,上面的第一個代碼塊將爲你解決問題。 –