【问题标题】:Can´t get response in angular from asp.net core web api无法从asp.net core web api获得角度响应
【发布时间】:2018-04-23 19:16:40
【问题描述】:

我希望有人可以提供帮助。我在 Visual Studio 中创建了一个新的 asp.net core angular 项目和一个简单的 api 方法,如下所示:

[Produces("application/json")]
[Route("api/Users")]
public class UsersController : Controller
{
    [HttpGet("[action]")]
    public async Task<JsonResult> CheckAPIConnection()
    {
        return Json(new { success = true }); 
    }

然后我在 Angular 中创建了一个新服务

    import { Injectable } from '@angular/core'; 
import { Http } from '@angular/http'; 
import { Headers, RequestOptions } from '@angular/http';
import 'rxjs/add/operator/map'; 

@Injectable() 
export class ApiService {
    constructor(private http: Http) {

}

checkAPIConnection() {
    let result = this.http.get("/api/Users/CheckAPIConnection");
    let jso:any;
    result.subscribe(res => jso = res);
    console.log(jso);
    if (jso.success == true) return true;
    else return false; 
}

在提琴手中请求成功并且响应正确。但是console.log 告诉我“jso”是未定义的。所以我尝试添加

result.subscribe(res => jso = res.json());

但这并没有改变任何东西。我也尝试使用jso["success"] 输入“jso”,但我认为市长的问题是 jso 未定义。

我试图寻找解决方案,但每个人都使用 then() 而不是 subscribe()。我错过了一些进口吗? (抱歉,我对 Angular 非常陌生,尤其是在从 api 接收数据方面)

【问题讨论】:

    标签: angular asp.net-core


    【解决方案1】:

    你应该使用 result.subscribe(res => this.jso = res);

    【讨论】:

    • jso 是一个局部变量,所以this.jso 无效。
    【解决方案2】:

    尝试将console.log 内的subscription 设为

    result.subscribe(res => {
           jso = res.json();
           console.log(jso);
    });
    

    或者,您可以使用rxjsdo 运算符来检查数据是否从服务返回,如下所示,

    result.subscribe(res => jso = res)
          .do(response =>  console.log(response));
    

    原因

    • Http Request 是async 所以log语句会在结果绑定到变量之前执行。

    【讨论】:

      猜你喜欢
      • 2016-03-18
      • 1970-01-01
      • 2020-08-25
      • 2022-11-23
      • 2020-05-08
      • 2017-11-28
      • 2023-01-04
      • 2015-11-14
      相关资源
      最近更新 更多