Ошибка: значения заголовка должны быть строками Ошибка: дополнительно-http: значения заголовка должны быть ионными строками

#cordova #ionic-framework #header

#cordova #ionic-framework #заголовок

Вопрос:

Я хотел бы получить данные из API в ionic. Во-первых, я столкнулся с проблемой CORS и не смог получить данные с разных устройств, кроме исходного порта. Я пытался использовать http native для извлечения данных на устройстве. У меня проблема с получением заголовка из API. Мне не разрешено изменять сервер. Тем не менее, я закончил с ошибкой, как показано ниже: Пожалуйста, подскажите мне, как использовать http native в ionic.

  (in promise): Error: advanced-http: header values must be strings
Error: advanced-http: header values must be strings

 

Я пробовал со следующим кодом:

 login(username: String, password: String) {
    if(username === undefined || username === '' || password === undefined || password === null){
      presentAlert("No username or password", this.alertController);
      return;
    }

      this.mcs.mobileBackend.setAuthenticationType(this.mcs.AUTHENTICATION_TYPES.oauth);
      this.mcs.mobileBackend.authorization.authenticate(username, password).then(
        () => {
          console.log("Test");
          this.http.get(this.mcs.mobileBackend.getCustomCodeUrl(mcsConfig.environment   '_api_care/lovs?code_table_name=activity_code'), {}, {headers:careheader})
      .then(data => {

        console.log(data.status);
        console.log(data.data); // data received by server
        console.log(data.headers);

      })
      .catch(error => {

        console.log(error.status);
        console.log(error.error); // error message as string
        console.log(error.headers);

      });
 }
      ).then(() => {
        console.log('test2'   username   password);
        this.getUserRole();
        this.authenticationState.next(true);
      }).catch(err => {
        console.log(err,Headers);
        presentAlert(err, this.alertController);
      }); 

  }
getHeader(){
    let headers = new Headers();
    this.createAuthorizationHeader(headers);
    headers.append('Content-Type', 'application/json');
   }
getUserRole() {
    return this.http.get(this.mcs.mobileBackend.getPlatformUrl('users/me'), {},{ }).then(data => {
      console.log(data); console.log(data.headers);
    });
  }  
 getReportList(offset: number = 0, limit: number = mcsConfig.rowLimit) {
    let queryParam = '?offset='   (offset * limit)   'amp;limit='   limit;
    //return this.mcs.mobileBackend.customCode.invokeCustomCodeJSONRequest(mcsConfig.environment   '_api_care/my/incidents'   queryParam, 'GET', null);
    return this.http.get(this.mcs.mobileBackend.getCustomCodeUrl(mcsConfig.environment   '_api_care/my/incidents'  queryParam), {},{headers: this.getMcsHeaders()});
    }
 

Данные не отображаются.

Комментарии:

1. можете ли вы сделать свой вопрос простым и понятным?

2. поскольку я использую собственный http, он отлично работает, но ваш вопрос немного сложен для понимания.

3. @KhurshidAnsari Могу ли я узнать, как использовать собственный http? Правильно ли я использую http native? Большое спасибо.

4. Я думаю, что вы не передаете URL в строковом типе данных.

5. @KhurshidAnsari мой URL-адрес списка отчетов неверен? это работает в port8100. но не в эмуляторе. Как передать URL-адрес в строковом типе данных. Большое спасибо

Ответ №1:

Вот мой заголовок ниже :

 getMcsHeadersString() {
var cheaders = {};
for (let key in this.mcs.mobileBackend.getHttpHeaders()) {
  cheaders[key]= this.mcs.mobileBackend.getHttpHeaders()[key];
}
//console.log("STring_HeaderKey_" cheaders['_keys'] "HeaderValue_" cheaders['_values']);
delete cheaders['_keys'];
delete cheaders['_values'];
return cheaders;
 

}