HTTP GET передать два объекта

Не знаю как через Return передать и users и user2,а не только user. Все перепробовал, помогите пожалуйста.

[HttpGet("{id}/{id2?}")]
        public async Task<ActionResult<Survey>> Get(int id, int id2)
        {
            Survey user = await db.Surveys.FirstOrDefaultAsync(x => x.Id == id);
            Survey user2 = await db.Surveys.FirstOrDefaultAsync(x => x.Id == id2);
            if (user == null)
                return NotFound();

            return new ObjectResult(user);

        }

Ответы (2 шт):

Автор решения: Levkovskiy Alex

Лучшая реализация по моему мнению была бы использовать класс со свойствами User1 и User2 как сказал @tym32167. Однако так же вы можете использовать кортеж, для этого просто объявите тип вида:

public Tuple<User, User> Method()
 {
     return new Tuple<User, User> { Item1 = User1, Item2 = User2 };
 }

Так же возможно реализация в виде List<User>

→ Ссылка
Автор решения: Mikhail Vazhenin

Если не требуется отдельной сущности под ответ, то так же можно использовать анонимный тип new {}. В нем можно управлять названиями полей.

[HttpGet("{id}/{id2?}")]
public async Task<IActionResult> Get(int id, int id2)
{
    Survey user = await db.Surveys.FirstOrDefaultAsync(x => x.Id == id);
    Survey user2 = await db.Surveys.FirstOrDefaultAsync(x => x.Id == id2);
    if (user == null)
       return NotFound();

    return new ObjectResult(new {user, user2}); //or new {User1 = user, User2= user2 }
}

Как упомянул @tym32167, начиная с C# 7.0 можно использовать ValueTuple, но тут надо смотреть, сможет ли созданный объект сериализоваться. Вот msdn говорит, что не во всех версиях возможна сериализация ValueTuple (хотя у меня и в Core 3.1 не сработала)

→ Ссылка