Как сделать запрос GET со сложным объектом? - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь сделать запрос GET через WebApi со сложным объектом. Запрос таков:

[HttpGet("{param1}/{param2}")]
public async Task<IActionResult> GetRequest(string param1, int param2, [FromBody] CustomObject[] obj)
{
    throw new NotImplementException();
}

Где CustomObject:

[DataContract]
public class CustomeObject
{        
    [DataMember]
    public string Name { get; set; }
    [DataMember]
    public string Email { get; set; }
}

Как мне составить правильный запрос GET?

Ответы [ 3 ]

0 голосов
/ 07 мая 2018

Вы можете передать его как строковый json или использовать тело запроса по почте вместо get.

0 голосов
/ 07 мая 2018

Если ваш сложный объект определен сервером, вы можете смоделировать привязку к нему через URI и указать точки в свойствах в шаблоне маршрутизации. Мой совет - сохранить эту модель на одном уровне свойств. Вы можете связываться с более сложными объектами, но вы быстро обнаружите, что вам нужно написать собственное связующее для моделей.

Обратите внимание, что декоратор вашего аргумента нужно будет изменить на [FromUri], чтобы связать сложный объект через Uri. Серверы не обязаны поддерживать тела GET, и большинство из них не поддерживают.

public class CustomObject
{ 
    public string Name { get; set; }
    public string Email { get; set; }
}

[HttpGet]
[Route("{foo.Name}/{foo.Email}")]
public HttpResponseMessage Get([FromUri]CustomObject foo)
{
   //...body
  return Request.CreateResponse(HttpStatus.OK, foo);
} 
0 голосов
/ 07 мая 2018

[FromBody] CustomObject[] obj ... GET запрос не имеет тела сообщения, поэтому вы должны изменить его на FromUri.

Конечно, посмотрите на Документация

public class GeoPoint
{
    public double Latitude { get; set; } 
    public double Longitude { get; set; }
}

public ValuesController : ApiController
{
    public HttpResponseMessage Get([FromUri] GeoPoint location) { ... }
}

Запрос будет выглядеть как показано ниже, по сути, вы передаете все данные объекта в виде строки запроса

http://localhost/api/values/?Latitude=47.678558&Longitude=-122.130989

Массив примера объекта можно найти в другом посте передать массив объекта в webapi

...