Передать массив в ASP.NET строка запроса основного маршрута
Я хочу сделать этой, но я также хочу иметь возможность передавать массивы в строку запроса. Я пробовал такие вещи, как:
http://www.sitename.com/route?arr[]=this&arr[]=that
http://www.sitename.com/route?arr[]=this&that
http://www.sitename.com/route?arr[0]=this&arr[1]=that
http://www.sitename.com/route?arr0=this&arr1=that
http://www.sitename.com/route?arr=this&arr=that
и мой маршрут в коде C# выглядит так:
[Route("route")]
[HttpGet]
public void DoSomething(string[] values)
{
// ...
}
но во всех этих случаях значения всегда имеет значение null, когда он попадает в код C#. Что мне нужно, чтобы строка запроса передавала массив строк?
5 ответов
использовать имя параметра в строке запроса. Если у вас есть действие:
public void DoSomething(string[] values)
затем использовать values
в строке запроса для передачи массива на сервер:
?values=this&values=that
Я должен был сделать что-то подобное этому, но вместо строк я использовал список long для передачи некоторого id для поиска. Используя опцию множественного выбора, выбранные значения отправляются в метод (через get) следующим образом:
[HttpGet("[action]")]
public IActionResult Search(List<long> idsSelected)
{
///do stuff here
}
Я также использую Route("[controller]")
перед объявлением класса. Работает просто отлично, но список элементов разбит на несколько параметров в url-адресе, как показано ниже.
http://localhost:5000/Search/idsSelected=1&idsSelected=2
строка с разделителями не является стандартной. Подумайте также о клиенте, если вы поддерживаете swagger или другие генераторы.
для тех, кто интересуется ошибкой .net core 2.1, которая получает пустой список, работа здесь:https://github.com/aspnet/Mvc/issues/7712#issuecomment-397003420
ему нужен параметр name на FromQuery
[FromQuery(Name = "employeeNumbers")] List<string> employeeNumbers
дано:
public ValuesController
{
public IACtionResult Get([FromUri]string[] arr)
{
Return Ok(arr.Lenght);
}
}
следующий запрос будет работать:
GET /api/values/?arr[0]=a&arr[1]=b&arr[2]=c
в конце концов, я просто передал одну строку с разделителями, а затем использовал строку.Разделение для разделения на стороне сервера. Не самое красивое решение, но оно работает. Пока кто-то не придумает лучший ответ, это все, что у меня есть. Я должен повторить, что я использую .NET Core, и эти строки запроса специфичны для фреймворка.