【问题标题】:angular 7 - http get returns empty角度 7 - http get 返回空
【发布时间】:2019-05-18 20:41:00
【问题描述】:

我正在尝试使用 Angular(SPA 模板)在 ASP.NET CORE 中从头开始创建我的项目。我创建了一个基本的 API 和表单,但在网络 -> 响应中接收数据时无法获取数据。这是我的代码

API 控制器

[HttpGet]
public IActionResult Get()
{
        var res = Json(UsersBAL.GetAll());
        return res;
}

角度组件

import { Component, OnInit } from '@angular/core';
import { UsersService } from '../../Services/users.service';
@Component({
  selector: 'app-vehicle-form',
  templateUrl: './vehicle-form.component.html',
  styleUrls: ['./vehicle-form.component.css']
})
export class VehicleFormComponent implements OnInit {
  users: any;
  constructor(private usersService: UsersService) { }
  ngOnInit() {
this.usersService.getUsers().subscribe((data: any) => {
  this.users = data;
  console.log("Users : ",data);
 },
  error => {
    console.log(error)
  })
//console.log("Users : ",this.users);
 }
}

角度服务

import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable, of } from 'rxjs';
import { catchError, map, tap } from 'rxjs/operators';
@Injectable({
  providedIn: 'root'
})
export class UsersService {
  api_url = 'http://localhost:58508/api/';
  constructor(private http: HttpClient) { }
  getUsers() {
return this.http.get(this.api_url + 'Users')
.pipe(map((response: any) => response.json()))
.pipe(
  tap(_ => console.log('fetched users')),
catchError(this.handleError('getusers', []))
);
}
  private handleError<T> (operation = 'operation', result?: T) {
return (error: any): Observable<T> => {

  // TODO: send the error to remote logging infrastructure
  console.error(error); // log to console instead

  // TODO: better job of transforming error for user consumption
  console.log(`${operation} failed: ${error.message}`);

  // Let the app keep running by returning an empty result.
  return of(result as T);
};
  }
}

【问题讨论】:

  • 从 get 方法中删除这一行 .pipe(map((response: any) =&gt; response.json()))HttpClient默认转成json()

标签: angular asp.net-web-api asp.net-core angular-http angular7


【解决方案1】:

您不需要HttpClient 中的map(res =&gt; res.json())。它默认采用 JSON 并立即为您解析。

所以只需在服务中返回它:

getUsers() {
  return this.http.get(this.api_url + 'Users')
    .pipe(
      tap(_ => console.log('fetched users')),
    catchError(this.handleError('getusers', []))
  );

【讨论】:

    【解决方案2】:

    get 方法中删除这一行.pipe(map((response: any) =&gt; response.json()))

    HttpClient 默认给出json 响应数据。

    return this.http.get(this.api_url + 'Users')
    // .pipe(map((response: any) => response.json())) -- not required
    .pipe(
      tap(_ => console.log('fetched users')),
    catchError(this.handleError('getusers', []))
    );
    

    【讨论】:

    • 您的回复如何?如果您在删除 map 后执行 tap(data =&gt; console.log(data)),
    • 相同...空数组
    • 您是否在浏览器控制台的网络选项卡中看到您的响应?
    • getusers 失败:(未知 url)的 Http 失败响应:0 未知错误
    • 那不是纯 JSON 对象。它是您返回的数组。 JSON 对象应以{ 开头。您可以做的是返回您的数据,例如{respData: ['Your actual array data']}。然后将其映射为.pipe(map((response: any) =&gt; response['respData']))
    猜你喜欢
    • 2020-11-18
    • 2019-03-30
    • 2011-03-18
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    相关资源
    最近更新 更多