Как отправить сложные данные в конечную точку контроллера - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть этот базовый c случай:

    [HttpPost("endpoint")]
    public IActionResult Endpoint(DateTime date, string value, bool modifier)
    {
        return Ok($"{date}-{value}-{modifier}");
    }

, и я могу отправить ему запрос с

    var testContent = new FormUrlEncodedContent(new Dictionary<string, string>
    {
        { "date", DateTime.Today.ToShortDateString() },
        { "value", "value1" },
        { "modifier", true.ToString() }
    });

Вместо этого я хочу, чтобы моя конечная точка была такой вместо

    [HttpPost("endpointwithlist")]
    public IActionResult EndpointWithList(DateTime date, List<string> value, bool modifier)
    {
        return Ok($"{date}-{value.FirstOrDefault()}-{modifier}");
    }

Как мне отправить это? Я пробовал ниже, ничего не работает

    var json = JsonConvert.SerializeObject(new { date, value = valueCollection.ToArray(), modifier });
    var testContentWithList = new ByteArrayContent(Encoding.UTF8.GetBytes(json));
    testContentWithList.Headers.ContentType = new MediaTypeHeaderValue("application/json");

Ответы [ 2 ]

2 голосов
/ 18 апреля 2020

Вы можете создать класс модели для полезной нагрузки

public class EndpointWithListModel
{
    public DateTime Date {get; set;}
    public List<string> Value {get; set;}
    public bool Modifier {get; set;}
}

, а затем параметр метода может использовать атрибут [FromBody]

public IActionResult EndpointWithList([FromBody]EndpointWithListModel model)

, а затем отправить json в метод POST Например, здесь . Использование HttpClient:

using (var client = new HttpClient())
{
    var response = await client.PostAsync(
    "http://yourUrl", 
     new StringContent(json, Encoding.UTF8, "application/json"));
}
0 голосов
/ 18 апреля 2020

если ваши переменные (date, valueController и модификатор) имеют правильный тип, следующий код должен работать.

  var json = JsonConvert.SerializeObject(new { date:date, value : valueCollection.ToArray(), modifier:modifier });
...