Передать массив в 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, и эти строки запроса специфичны для фреймворка.