2016-05-11 4 views
2

Я немного борюсь с реализацией POST-вызова API ASP.NET с помощью Ionic 2. Мне удалось получить GET с помощью полезного руководства, но я ничего не смог найти аналогично POST, пока я не наткнулся на видео YouTube. С помощью этого видео, у меня есть этот метод моего провайдера:POST-вызовы с Ionic 2

backendlogin() { 
    if (this.data) { 
     return Promise.resolve(this.data); 
    } 

    return new Promise(resolve => { 
     var json = JSON.stringify({ email: '[email protected]', password: 'root' }); 
     var params = 'json=' + json; 
     var headers = new Headers(); 
     headers.append('Content-Type', 'application/json'); 

     this.http.post('http://insertipadresshere/api/login', 
      params, { 
       headers: headers 
      }) 
      .map(res => res.json()) 
      .subscribe(data => { 
       this.data = data; 
       resolve(this.data); 
      }, 
      error => alert(error), 
     () => console.log("Finished") 
    ); 
    }); 
} 

Мои методы GET в основном то, что было предусмотрен ионическим при создании поставщика. Они похожи на этот код, за исключением части, где объявляются переменные и добавляются заголовки, а также http.get вместо сообщения.

Это функция я использую, чтобы вызвать функцию поставщика от контроллера страницы:

setuplogin() { 
    this.backend.backendlogin() 
     .then(data => { 
      this.data = data; 
     }); 
    console.log(this.data); 
} 

Теперь к вопросу. Если я все понимаю, backendLogin() должен отображать предупреждение с ошибкой, если что-то не удается, что и происходит. Предупреждение говорит «Объект объекта». Единственная вещь в консоли - пустой журнал, предположительно из setupLogin(), поскольку данные пустые. Api должен взять адрес электронной почты и пароль и вернуть uID. Может кто-то указать мне верное направление?

ответ

3

Я бы отклонить обещание, если есть ошибка:

return new Promise((resolve,reject) => { 
    var json = JSON.stringify({ email: '[email protected]', password: 'root'}); 
    var params = 'json=' + json; 
    var headers = new Headers(); 
    headers.append('Content-Type', 'application/json'); 

    this.http.post('http://insertipadresshere/api/login', 
     params, { 
      headers: headers 
     }) 
     .map(res => res.json()) 
     .subscribe(data => { 
      this.data = data; 
      resolve(this.data); 
     }, 
     error => reject(error), 
    () => console.log("Finished") 
); 
}); 

То есть, я не думаю, что это необходимо, чтобы создать сырое обещание. Вы рычаги toPromise метод наблюдаемыми:

var json = JSON.stringify({ email: '[email protected]', password: 'root'}); 
var params = 'json=' + json; 
var headers = new Headers(); 
headers.append('Content-Type', 'application/json'); 

return this.http.post('http://insertipadresshere/api/login', 
     params, { 
      headers: headers 
     }) 
     .map(res => res.json()) 
     .toPromise(); 
); 

Получить ошибку

setuplogin() { 
    this.backend.backendlogin() 
    .then(data => { 
     this.data = data; 
     console.log(this.data); 
    }, error => { 
     // do something 
    }); 
} 

Чтобы закончить, можно непосредственно использовать наблюдаемый вместо возврата обещание:

var json = JSON.stringify({ email: '[email protected]', password: 'root'}); 
var params = 'json=' + json; 
var headers = new Headers(); 
headers.append('Content-Type', 'application/json'); 

return this.http.post('http://insertipadresshere/api/login', 
     params, { 
      headers: headers 
     }) 
     .map(res => res.json()); 
); 

и подписаться на его в setupLogin:

setuplogin() { 
    this.backend.backendlogin() 
    .subscribe(data => { 
     this.data = data; 
     console.log(this.data); 
    }, 
setuplogin() { 
    this.backend.backendlogin() 
    .subscribe(data => { 
     this.data = data; 
     console.log(this.data); 
    }, error => { 
     // do something with error 
    }); 
} 
+0

Не работает, к сожалению. Считаете ли вы, что это проблема с API? Я сам не написал код для этого, но могу связаться с автором. – Pharetra

+1

Вы видите запрос, который фактически выполняется в инструментах разработчика, вкладке сети? Может быть полезно взглянуть на него ;-) –

+0

Я могу, какие данные вам нужны? Я замечаю, что есть 400 Bad Request для метода POST. – Pharetra