WCF и необязательные параметры
Я только начал использовать WCF с REST и UriTemplates. Возможно ли теперь использовать дополнительные параметры?
Если нет, то что вы, ребята, порекомендовали бы мне сделать для системы с тремя параметрами, которые всегда используются в URL-адресе, и другими, которые являются необязательными (различное количество)?
Пример:
https://example.com/?id=ID&type=GameID&language=LanguageCode&mode=free
- идентификатор, тип, язык всегда присутствуют
- режим не является обязательным
3 ответа
Я только что протестировал его с WCF 4, и он работал без проблем. Если я не использую режим в строке запроса, я получу ноль в качестве значения параметра:
[ServiceContract]
public interface IService
{
[OperationContract]
[WebGet(UriTemplate = "GetData?data={value}&mode={mode}")]
string GetData(string value, string mode);
}
Реализация метода:
public class Service : IService
{
public string GetData(string value, string mode)
{
return "Hello World " + value + " " + mode ?? "";
}
}
Для меня это выглядит так, что все параметры строки запроса являются необязательными. Если параметр отсутствует в строке запроса, он будет иметь значение по умолчанию для его типа => null
за string
0 для int
и т.д. MS также заявляет, что это должно быть реализовано.
В любом случае вы всегда можете определить UriTemplate
с id
, type
а также language
и получить доступ к необязательным параметрам внутри метода WebOperationContext
:
var mode = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters["mode"];
Я пробовал с необязательными параметрами в restful веб-сервисе, если мы ничего не передадим в значение параметра, он останется нулевым. После этого мы можем проверить на нулевое или пустое значение в функции. Если оно пустое, не используйте его, иначе вы можете использовать его. Скажем у меня есть код ниже
[ServiceContract]
public interface IService
{
[OperationContract]
[WebGet(UriTemplate = "GetSample?part1={part1}&part2={part2}")]
string GetSample(string part1, string part2);
}
Здесь part1 является обязательным, а part2 необязательным. Теперь функция будет выглядеть
public class Service : IService
{
public string GetSample(string part1, string part2)
{
if (!string.IsNullOrEmpty(part2))
{
return "Hello friends..." + part1 + "-" + part2;
}
return "Hello friends..." + part1;
}
}
Вы также можете сделать конвертацию на основе ваших требований.
Вы должны использовать "?" с последующим "/" в вашем URL.
пример:
[WebGet(UriTemplate = "GetSample/?OptionalParamter={value}")]
string GetSample(string part1);