Http Get - получить объект из веб-API - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь получить список объектов из веб-API. Это код сервера:

public IQueryable<PersonViewModel> GetPeople()
{
    var People = from p in db.People
                select new PersonViewModel()
                {
                    Id = p.Id,
                    FirstName = p.FirstName,
                    LastName = p.LastName,
                    IdentityNo = p.IdentityNo,
                    DateOfBirth = p.DateOfBirth
                };

    return People;

}

[Route("api/Person/GetPersonById/{value?}")]
public IQueryable<PersonViewModel> GetPersonById(string value = "")
{
    if (value != null)
    {
        var a= GetPeople().Where(x => x.IdentityNo.StartsWith(value));
        return a;
    }
    else return GetPeople();

} 

Модель лица:

public class PersonViewModel
{
    public PersonViewModel()
    {

    }
    public PersonViewModel(Person p)
    {
        Id = p.Id;
        FirstName = p.FirstName;
        LastName= p.LastName;
        IdentityNo = p.IdentityNo;
        DateOfBirth = p.DateOfBirth;
    }
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string IdentityNo { get; set; }
    public Nullable<System.DateTime> DateOfBirth { get; set; }
}

Код на стороне клиента: Это модель:

export class Person  {
    Id:string;
    FirstName :string;
    LastName:string;
    IdentityNo:string;
    DateOfBirth:Date;
}

У меня был сервис, который содержит список типа Person, и функция, которая пытается получить данные с сервера.

PersonIdList: Person[];

getPersonById(uri: string){
    this.http.get('http://localhost:58527/api/Person/GetPersonById/' + uri)
        .map((data: Response) => {
            return data.json() as Person[];
        }).toPromise().then(x => { this.PersonIdList = x; })
}

Но я не получаю никаких результатов в списке, когда отладка PersonIdList не определена. Сообщение об ошибке:

ReferenceError: PersonIdList не определен в eval (eval в PersonService.getPersonById (WebPack-внутренний: ///./src/app/Shared/person.service.ts), : 1: 1) в PersonService.getPersonById (WebPack-внутренний: ///./src/app/Shared/person.service.ts: 26: 5) на MainComponent.onSubmit (webpack-internal: ///./src/app/pages/main/main.component.ts: 58: 28) в Object.eval [as handleEvent] (ng: ///AppModule/MainComponent.ngfactory.js: 387: 31) ↵ at handleEvent (WebPack-внутренний: ///./node_modules/@angular/core/esm5/core.js: 13805: 155) ↵ в callWithDebugContext (WebPack-внутренний: ///./node_modules/@angular/core/esm5/core.js: 15314: 42) ↵ в Object.debugHandleEvent [как handleEvent] (WebPack-внутренний: ///./node_modules/@angular/core/esm5/core.js: 14901: 12) ↵ при отправке события (WebPack-внутренний: ///./node_modules/@angular/core/esm5/core.js: 10220: 25) ↵ в Eval (WebPack-внутренний: ///./node_modules/@angular/core/esm5/core.js: 10845: 38) ↵ на HTMLButtonElement.eval (WebPack-внутренний: ///./node_modules/@angular/platform-browser/esm5/platform-browser.js: 2680: 53)

1 Ответ

0 голосов
/ 27 июня 2018

похоже, это связано со ссылками, Можете ли вы попробовать с сохранением ссылки "this", например, let _this = this;

function getPersonById(uri) {
let _this = this;
this.http.get('http://localhost:58527/api/Person/GetPersonById/' + uri)
    .map(function (data) {
    return data.json();
}).toPromise().then(function (x) { _this.PersonIdList = x; });

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...