параметр Web API не может преобразовать несколько параметров из строки запроса в массив, так что у вас есть два варианта:
- настроить parameter binding
- вручную доступ и преобразование параметров строки запроса
Второй вариант включает в себя получение пар слов-значений строки запроса и их парсинг. Для того, чтобы получить пары значений имени, используйте:
Request.GetQueryNameValuePairs()
Чтобы извлечь значения INT, вы можете сделать что-то вроде этого:
var values= Request.GetQueryNameValuePairs()
.Where(kvp => kvp.Key == "someVal")
.Select(kvp => int.Parse(kvp.Value))
.ToArray();
Конечно, вы должны контролировать ошибки на разборе и т.д. , Это базовый пример кода.
Это реализация модели связующего для первого варианта:
public class IntsModelBinder : IModelBinder
{
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
if (bindingContext.ModelType != typeof (Ints))
{
return false;
}
var intValues = actionContext.Request.GetQueryNameValuePairs()
.Where(kvp => kvp.Key == bindingContext.ModelName)
.Select(kvp => int.Parse(kvp.Value))
.ToList();
bindingContext.Model = new Ints {Values = intValues};
return true;
}
}
Опять же, это базовая реализация, что, между прочим, не хватает контроля ошибок.
Это один из способов использовать его в действии, но, пожалуйста, прочитайте ссылку на параметре связывания, чтобы увидеть другие (лучше) способы его использования:
// GET api/Test?keys=1&keys=7
public string Get([ModelBinder(typeof(IntsModelBinder))]Ints keys)
{
return string.Format("Keys: {0}", string.Join(", ", keys.Values));
}
интересно, если это W3C совместимого с имеют mutliple появление параметра строки запроса –