Передача списка объектов и простых параметров в веб-API от контроллера MVC - PullRequest
2 голосов
/ 09 июля 2020

Здравствуйте, я пытаюсь использовать метод HttpClient.GetAsyn c для получения некоторой информации из моего веб-API. Я не знаю, как структурировать параметры запроса для GET-запроса, когда нужно передать список сложных объектов. Я не обязательно привязан к использованию параметров запроса, я не уверен, будет ли это хорошим случаем, чтобы просто сделать его POST и передать данные в теле? В целом я просто ищу либо лучший способ сделать это, либо несколько рекомендаций о том, как действовать.

WEB API:

Это мой код WEB API, так как вы можете видеть, что я передаю список VariantDTO и 2 простых параметра

[HttpGet]
[ResponseType(typeof(List<SchematicDTO>))]
[Route("api/schematic/GetSchematicsForMacroVariants")]
public HttpResponseMessage GetSchematicsForMacroVariants([FromUri]List<VariantDTO> dto, bool IncludeEngineered, bool IncludeStandard)
{
        
}

VariantDTO

Вот как выглядит мой DTO.

public class VariantDTO
{
    public string Id { get; set; }
    public string Variant { get; set; }
}

MVC Контроллер

В моем MVC контроллере я пытаюсь вызвать WEB API. Я только начал использовать веб-api asp. net в первый раз, и я немного не понимаю, как go передавать эти данные?

public JsonResult GetSchematicsForSelectedVariants(List<VariantViewModel> ListOfVariants,bool GetEngineered, bool GetStandard)
    {
        List<SchematicViewModel> vms = new List<SchematicViewModel>(); //List of schematic vm we want to return
        //Create DTO from View Model
        List<VariantDTO> Dto = ListOfVariants.Select(x => new VariantDTO
        {
            Id = x.Id,
            Variant = x.Variant
        }).ToList();
        
        using (var client = new HttpClient())
        {
            //---NOT SURE HOW TO PASS MY DTO and GetEngineered and GetStandard parameters????
            var responseTask = client.GetAsync(ServerName + "/api/schematic/GetSchematicsForMacroVariants/");
            responseTask.Wait();
            var result = responseTask.Result;
            if (result.IsSuccessStatusCode)
            {
                var readTask = result.Content.ReadAsStringAsync().Result;
                //Deserialize object
                var deserialized = JsonConvert.DeserializeObject<List<SchematicDTO>>(readTask);
                vms = deserialized.Select(x => new SchematicViewModel
                {
                    FullPath = x.FullPath,
                    Id = x.Id
                }).ToList();
            }
        }
        return Json(vms, JsonRequestBehavior.AllowGet);
    }

Любые указания или предложения было бы fantasti c, так как я немного потерялся.

Спасибо!

...