C# 无法访问Angular 5和ASP.NET Core中的状态代码
我有一个服务向Core中的某个操作发出POST请求: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
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”);
}
});
解释得很好的答案:)我可以知道这个答案有什么问题吗?为什么要投否决票?