Я разрабатываю решение для пересмотра решения WebApi и хотел бы передать несколько сложных типов в качестве параметров URL. Мне нужно передать два объекта личных данных. Личные данные содержат FullName и Id.WebApi сложный тип uri/получить несколько параметров
public class Foo
{
public string FullName { get; set; }
public string Id { get; set; }
}
Я ожидал, что я мог бы назвать свою службу REST с URL, подобной следующим:
http://localhost:53088/values/GetByFoo/?foo1={"FullName":"Name 1","Id":"1"}&foo2={"FullName":"Name 2","Id":"2"}
Так я кодированный ValuesController.cs, как это:
[HttpGet]
public List<Foo> GetByFoo2([FromUri] Foo foo1, [FromUri] Foo foo2)
{
List<Foo> foos = new List<Foo>();
foos.Add(foo1);
foos.Add(foo2);
return foos;
}
К сожалению, параметры в методах [HttpGet] всегда есть NULL
Поскольку он не работал, я попытался начать с одного часа госу и это то, что я достиг до сих пор:
ValuesController.cs
[HttpGet]
public Foo GetByFoo([FromUri] Foo foo)
{
return foo;
}
Я мог только получить правильные значения в этом случае: /Значения/GetByFoo FullName = NAME1 & Id = 1
В этом параметре случае Foo всегда NULL /значения/GetByFoo/Foo = { "FullName": "Название 1", "Id": "1"}?
Тогда я думал использовать один параметр , содержащий как foo1, так и foo2 properti и получите запрос:
/values / GetByFooPair /? foopair = {"Foo1": {"FullName": "Name 1", "Id": "1"}, "Foo2": {"FullName ":" Имя 2" , "Id": "2"}}
public class FooPair
{
public Foo Foo1 { get; set; }
public Foo Foo2 { get; set; }
}
Но это не работает, либо, параметр метода контроллера всегда нуль.
С другой стороны, если я использую метод HttpPost и делаю запрос ajax с использованием jQuery, параметры верны и содержат ожидаемые значения.
[HttpPost]
public FooPair GetByFooPairPost([FromBody] FooPair foopair)
{
return foopair;
}
Возможно ли передать несколько сложных типов параметров по URL-адресу?
Что мне не хватает? Что я делаю не так?
Вы должны использовать [HttpPost]. Нет ничего плохого в этом. Помните, что Querystrings имеет предел – Shyju