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 шт):
Лучшая реализация по моему мнению была бы использовать класс со свойствами User1 и User2 как сказал @tym32167. Однако так же вы можете использовать кортеж, для этого просто объявите тип вида:
public Tuple<User, User> Method()
{
return new Tuple<User, User> { Item1 = User1, Item2 = User2 };
}
Так же возможно реализация в виде List<User>
Если не требуется отдельной сущности под ответ, то так же можно использовать анонимный тип 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 не сработала)