#c# #asp.net-core #xamarin #.net-core #asp.net-core-mvc
#c# #asp.net-ядро #xamarin #.net-ядро #asp.net-ядро-mvc #asp.net-core-mvc
Вопрос:
Вместо отправки нескольких запросов HttpGet для получения всех данных из БД, я хочу отправить один запрос и вернуть всю информацию. У меня есть, например, несколько моделей:
public class Model1
{
public int Id { get; set; }
public string Address{ get; set; }
}
public class Model2
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Model3
{
public int Id { get; set; }
public string Food{ get; set; }
}
Мне нужно вернуть список этих моделей (List<Model1>, List<Model2>, List<Model3>) клиенту.
Я создаю новую модель
public class Allinone
{
public List<Model1> Model1= new List<Model1>();
public List<Model2> Model2= new List<Model2>();
public List<Model3> Model3= new List<Model3>();
}
В контроллере у меня есть это:
[HttpGet("updateall")]
public async Task<IActionResult> UpdateAll(int clientid)
{
Allinone model = new Allinone();
model.model1 = db.where(....);
model.model1 = db.where(....);
model.model1 = db.where(....);
return Ok(model);
}
В режиме отладки я вижу, что модель правильно заполнена данными из базы данных, но на стороне клиента (в Postman и в клиентском приложении Xamarin) Я не могу прочитать содержимое. В postman я получаю только пустую строку {}.
В клиентском приложении Xamarin у меня те же модели, что и в asp net core, но содержимое пустое.
Ответ №1:
ИМХО, вам не нужно инициализировать list в вашем классе AllInOne, просто сделайте это так:
public class AllInOne
{
public List<Model1> Models1 {get; set;}
public List<Model2> Models2 {get; set;}
public List<Model3> Models3 {get; set;}
}
Попробуйте изменить подпись вашего действия на это:
[Route("UpdateAll/{clientId}")]
public async Task<ActionResult<AllInOne>> UpdateAll(int clientid)
Комментарии:
1. Привет, Сергей, я попробовал, как вы предложили, просто вместо IActionResult я использовал ActionResult, потому что с IAction произошла некоторая ошибка, но все та же проблема, в результате я получаю только пустую строку {} .
2. Я внес некоторые изменения. Пожалуйста, попробуйте это в Postman для теста
3. Спасибо, что решили проблему очень быстро :). Проблема заключалась в неправильной инициализации списка. Я никогда не знаю, следует ли ее инициализировать или нет. После того, как я изменил, как вы предложили, теперь он работает (он также работает с [httpget («updateall»)] .)
4. Спасибо за отзыв. Я рад, что смог вам помочь.