Я реализовал простой пользовательский QueryStringConverter так, чтобы можно было сделать qs1, строка [] затем имеет переменную строки запроса быть разграниченной запятой (например, http://server/service/SomeRequest?qs1=val1,val2,val3,val4 )
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Xml,
UriTemplate = "SomeRequest?qs1={qs1}")]
XElement SomeRequest2(string[] qs1);
Первый, Вам нужен класс, который наследовался WebHttpBehavior так, чтобы мы могли ввести наш пользовательский QueryStringConverter:
public class CustomHttpBehavior : System.ServiceModel.Description.WebHttpBehavior
{
protected override System.ServiceModel.Dispatcher.QueryStringConverter GetQueryStringConverter(System.ServiceModel.Description.OperationDescription operationDescription)
{
return new CustomQueryStringConverter();
}
}
Затем наш CustomQueryStringConverter, который обрабатывает строку [] параметры:
public class CustomQueryStringConverter : System.ServiceModel.Dispatcher.QueryStringConverter
{
public override bool CanConvert(Type type)
{
if (type == typeof(string[]))
{
return true;
}
return base.CanConvert(type);
}
public override object ConvertStringToValue(string parameter, Type parameterType)
{
if (parameterType == typeof(string[]))
{
string[] parms = parameter.Split(',');
return parms;
}
return base.ConvertStringToValue(parameter, parameterType);
}
public override string ConvertValueToString(object parameter, Type parameterType)
{
if (parameterType == typeof(string[]))
{
string valstring = string.Join(",", parameter as string[]);
return valstring;
}
return base.ConvertValueToString(parameter, parameterType);
}
}
последняя вещь, которую необходимо сделать, создают расширение конфигурации поведения так, чтобы время выполнения могло получить экземпляр CustomWebHttpBehavior:
public class CustomHttpBehaviorExtensionElement : System.ServiceModel.Configuration.BehaviorExtensionElement
{
protected override object CreateBehavior()
{
return new CustomHttpBehavior();
}
public override Type BehaviorType
{
get { return typeof(CustomHttpBehavior); }
}
}
Теперь мы добавляем элемент к нашим расширениям конфигурации так, чтобы наш CustomWebHttpBehavior использовался, мы используем Название того расширения вместо
в нашем поведении:
можно теперь также расширить CustomQueryStringConverter для обработки других типов, которые значение по умолчанию каждый не делает, такие как nullable типы значения.
ПРИМЕЧАНИЕ: существует ошибка, зарегистрированная в подключении Microsoft, которое непосредственно касается этого кода. Код на самом деле не работает при почти всех обстоятельствах, где Вы пытаетесь Запросить, Преобразовывают различные типы.
удостоверьтесь, что Вы читаете это тщательно перед тем, чтобы тратить впустую часы Вашего времени, создавая пользовательские преобразователи строки запроса REST, которые не могут возможно работать. (Относится к Платформе 4.0 и ниже).
То, что необходимо сделать, должно узнать, какой объект делают Вас, на самом деле хотят для, например, если Вы хотите узнать книгу, названную "Upvote-if-u-like!" затем Ваш urls.py хотел бы
urlpatterns = [
path('textshare/<str:slug>',views.extract,name="textshare"),]
теперь, когда кто-то будет искать mybook.com/textshare/upvote-if-u-like!/
, он возьмет его к views.py, который был бы похож
def extract(request,slug):
context={}
obj=bookForm.objects.get(title=slug)
form=bookModelForm(instance=obj)
context={'form':form}
return render(request,'bookfound.html',context)
, где bookForm находится в Models.py, и bookModelForm находится в forms.py Счастливом Djangoing:)