C# 无法访问Angular 5和ASP.NET Core中的状态代码

C# 无法访问Angular 5和ASP.NET Core中的状态代码,c#,angular,asp.net-core,C#,Angular,Asp.net Core,我有一个服务向Core中的某个操作发出POST请求: 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.naviga

我有一个服务向Core中的某个操作发出POST请求:

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}
如何修复typescript错误?我该怎么办

错误如下所示:

在…/login/login.service.ts(21,20)中出错:错误TS2339:Property 类型“Object”上不存在“statusCode”


我假设您需要首先以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");
    }
});

默认情况下,您的
http
返回
observable
,要获得更好的控制,请执行如下强强制转换:

this.http.post<{statusCode:number}>(url, loginModel).subscribe(result => {
      console.log(result);
      if (result.statusCode === 200) { // here is available
        this.route.navigateByUrl("/main");
      }
});
this.http.post(url,loginModel).subscribe(结果=>{
控制台日志(结果);
如果(result.statusCode==200){//此处可用
此.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.
});
导出接口响应模型{
状态码:编号;
其他:字符串;
东西:绳子;
}
this.http.post(url,loginModel).subscribe(结果=>{
//您可以将结果作为ResponseModel类型使用。
});

在使用HttpClient时,我也遇到了同样的问题。之所以出现这种情况,是因为httpClient返回
可观察的
要绕过这个问题,我用这种方式

this.http.post<any>(url, loginModel)
    .subscribe(result => {
         console.log(result);
         if (result.statusCode === 200) {
           this.route.navigateByUrl("/main");
         }
});
this.http.post(url,loginModel)
.订阅(结果=>{
控制台日志(结果);
如果(result.statusCode==200){
此.route.navigateByUrl(“/main”);
}
});

解释得很好的答案:)我可以知道这个答案有什么问题吗?为什么要投否决票?