Не удается получить доступ к statusCode в Angular 5 и ASP.NET Core - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть служба, которая отправляет POST-запрос к действию в Core:

this.http.post(url, loginModel).subscribe(result => {
      console.log(result);
      if (result.statusCode === 200) { // here I got typescript error that `statusCode` does not belong to Object
        this.route.navigateByUrl("/main");
      }
});

и действие MVC:

public class AccountController : Controller
{
        [HttpPost]
        public IActionResult Login([FromBody] LoginViewModel model)
        {
            return Json(Ok());
        }
}

Ответ, который я получил в консоли:

{statusCode: 200}

Как исправить ошибку машинописи? Что мне делать?

Ошибка выглядит так:

ОШИБКА в ... / login / login.service.ts (21,20): ошибка TS2339: свойство statusCode не существует в типе Object.

Ответы [ 3 ]

0 голосов
/ 24 апреля 2018

по умолчанию ваш http возвращает observable<Object>, чтобы иметь лучший контроль, сильный бросок, как это:

this.http.post<{statusCode:number}>(url, loginModel).subscribe(result => {
      console.log(result);
      if (result.statusCode === 200) { // here is available
        this.route.navigateByUrl("/main");
      }
});

Для более сложного ответа API:

export interface ResponseModel {
    statusCode: number;
    other: string;
    thing: string;
}

this.http.post<ResponseModel>(url, loginModel).subscribe(result => {
      // Where you can consume result as ResponseModel type.
});
0 голосов
/ 24 апреля 2018

При работе с HttpClient я тоже столкнулся с той же проблемой.Это происходит потому, что httpClient return Observable<Object>, чтобы обойти эту проблему, я использую это таким образом,

this.http.post<any>(url, loginModel)
    .subscribe(result => {
         console.log(result);
         if (result.statusCode === 200) {
           this.route.navigateByUrl("/main");
         }
});
0 голосов
/ 24 апреля 2018

Я предполагаю, что вам нужно сначала проанализировать ответ в формате JSON, а затем подписаться на него, чтобы вы могли использовать result.statusCode в вызове метода.

, поэтому используйте этот код:

this.http.post(url, loginModel)
  .map(data => data.json())
  .subscribe(result => {
    console.log(result);
    if (result && result.statusCode === 200) { // here I got typescript error that `statusCode` does not belong to Object
      this.route.navigateByUrl("/main");
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...