возврат коллекции в api core api - PullRequest
0 голосов
/ 17 мая 2018

У меня есть маленький API с этими моделями с ef-core

public class AppUser : IdentityUser
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Company { get; set; }
    public ICollection<Account> Accounts { get; set; }
}

public class Account
{
    public int id { get; set; }
    public AppUser User { get; set; }
    public string AccountNumber { get; set; }
}

и у меня есть функция get контроллера:

[HttpGet]
public async Task<IActionResult> Home()
{
    // retrieve the user info
    //HttpContext.User
    var userId = _caller.Claims.Single(c => c.Type == "id");
    var user = await _appDbContext.Users.SingleAsync(c => c.Id == userId.Value);            

    return new OkObjectResult(new
    {
        Message = "This is secure API and user data!",
        user.FirstName,
        user.LastName,
        user.Accounts
    });
}

Как мне заставить контроллер вернуть список учетных записей? В отладке я вижу переменную «account» с правильными данными, я просто не уверен, как отформатировать этот var и вернуть его в api

Я сейчас получаю:

{
"message": "This is secure API and user data!",
"firstName": "Bill",
"lastName": "Johnson",
"serviceAccounts": null
}

ОБНОВЛЕНИЕ: Итак, я запустил приложение с помощью командной строки dotnet и получил

{"firstName":"Bill","lastName":"Johnson","serviceAccounts":[{"id":1,"camsUser":{"firstName":"Bill","lastName":"Johnson","company":null

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Я понял это с помощью:

var userId = _caller.Claims.Single(c => c.Type == "id");
var user = await _appDbContext.Users.Include(s =>s.Accounts).SingleAsync(c => c.Id == userId.Value);
var accounts = user.Accounts.Select(a => new
        {
            a.AccountNumber,
            a.id
        });
return new OkObjectResult(new
        {
            user.FirstName,
            user.LastName,
            accounts
        }); 
0 голосов
/ 17 мая 2018

Если дочерние объекты настроены на отложенную загрузку, то вы должны выбрать учетные записи и пользователя как

var user = await _appDbContext.Users.Include(u => u.Accounts).SingleAsync(c => c.Id == userId.Value); 
...