Если ваш метод Идемпотент (то есть GET), кажется, вы знаете, что не можете использовать тело для переноса.Таким образом, у вас остались URL-адрес и заголовки.
Вставьте в заголовки информацию, не зависящую от этого конкретного запроса - например, ProtocolVersion, SystemName - и проанализируйте эти заголовки в службе.
В URL введите те параметры, которые являются контекстными и требуются для выполнения вашей операции: например, EntityId, FilterValue.
Если вы передаете список для одного параметра - например, value1 = 1,2,3- тогда вы можете рассмотреть возможность использования пользовательского конвертера QueryString (см. ниже - присоединение поведения к конечной точке - это еще одно упражнение).
И, в конце концов, вам, возможно, придется просто передать столько параметров.Это очень часто встречается в операциях, основанных на поиске, где могут быть различные измерения для поиска.
using System;
using System.Linq;
using System.ServiceModel.Description;
using System.ServiceModel.Dispatcher;
public class CustomQueryStringConverter : QueryStringConverter
{
public override bool CanConvert(Type type)
{
return base.CanConvert(type.IsArray ? type.GetElementType() : type);
}
public override object ConvertStringToValue(string parameter, Type parameterType)
{
object result = null;
if (parameterType.IsArray)
{
if (!ReferenceEquals(parameter, null))
{
object[] items = parameter
.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
.Where(s => !string.IsNullOrWhiteSpace(s))
.Select(s => base.ConvertStringToValue(s.Trim(), parameterType.GetElementType()))
.ToArray();
Array arrayResult = Array.CreateInstance(parameterType.GetElementType(), items.Length);
for (int i = 0; i < items.Length; ++i)
{
arrayResult.SetValue(items[i], i);
}
result = arrayResult;
}
}
else
{
result = base.ConvertStringToValue(parameter, parameterType);
}
return result;
}
public override string ConvertValueToString(object parameter, Type parameterType)
{
string result = string.Empty;
if (parameterType.IsArray)
{
foreach (object item in (Array)parameter)
{
result += item.ToString() + ",";
}
result = result.TrimEnd(',');
}
else
{
result = base.ConvertValueToString(parameter, parameterType);
}
return result;
}
public class CustomQueryStringBehavior : WebHttpBehavior
{
protected override QueryStringConverter GetQueryStringConverter(OperationDescription operationDescription)
{
return new CustomQueryStringConverter();
}
}
}