ค้นหาเว็บไซต์

typescript - วิธีเพิ่มหัวข้อคำขอ HTTP ใน ng2-completer


ฉันกำลังประสบปัญหามาสองวันแล้วในการแก้ไขปัญหา header ที่ฉันกำลังเจอ ฉันสามารถเรียกใช้งาน API ของ ng2-completer ใน Postman ได้โดยไม่มีปัญหาใดๆ

ฉันต้องส่งโทเค็นในส่วนหัวของคำขอเพื่อยืนยันตัวตน มันทำงานได้ดีใน Postman แต่เมื่อฉันลองใน TypeScript มันกลับไม่ทำงานเลย

 this.dataService = completerService.remote("https://arsapi.azurewebsites.net/api/searchusers?searchstring=", 'userName', 'userName');
   let options = new RequestOptions({ headers: new Headers() });
   options.headers.set('Content-Type', 'application/json');
   options.headers.set("Authorization", 'Bearer JeBVR3A');
   this.dataService.requestOptions(options);

คำขอข้างต้นใน TypeScript ไม่ส่งเฮดเดอร์

ทำไมหัวข้อคำขอของฉันถึงไม่ถูกรวมอยู่ในการขอ?

ความช่วยเหลือใด ๆ ก็จะได้รับการชื่นชม

คำตอบ #1

ฉันคิดว่าสิ่งที่เกิดขึ้นคือคุณกำลังเพิ่มหัวข้อ (headers) ของคุณไปยังคำขอในโค้ด หลังจากที่คำขอถูกส่งไปแล้ว ซึ่งเป็นเหตุผลที่คุณไม่เห็นมันในคำขอ

คุณจำเป็นต้องเพิ่มบรรทัดเหล่านี้ภายในฟังก์ชัน completerService.remote() ของคุณ เนื่องจากนี่คือที่ที่มีการส่งคำขอ HTTP จริง ๆ

let options = new RequestOptions({ headers: new Headers() });
options.headers.set('Content-Type', 'application/json');
options.headers.set("Authorization", 'Bearer JeBVR3A');
this.dataService.requestOptions(options);

ฉันไม่รู้ว่าฟังก์ชัน completerService.remote() ของคุณมีลักษณะอย่างไร แต่ไม่ว่าบรรทัดโค้ดใดที่กำลังทำ HTTP GET คุณจะต้องวางบรรทัดด้านบนนี้ก่อน จากนั้นส่งตัวแปร options ให้กับมัน

คำตอบ #2

ฉันทำสิ่งนี้ในคอมโพเนนต์ของฉันและมันทำงานได้:

constructor(
    private completerService: CompleterService,
    private authenticationService: AuthenticationService
  ) {
    this.dataService = completerService.remote(`${environment.baseUrl}/cep/autocomplete?term=`, 'label', 'label');
    let options = new RequestOptions({headers: new Headers()});
    options.headers.set('Authorization', authenticationService.getToken());
    options.headers.set('Content-Type', 'application/json');
    this.dataService.requestOptions(options);
  }