WCF и необязательные параметры
Я только начал использовать WCF с REST и UriTemplates. Можно ли использовать дополнительные параметры?
Если нет, что бы вы, ребята, рекомендовали мне для системы, которая имеет три параметра, которые всегда используются в URL-адресе, а другие, которые являются необязательными (переменная сумма)?
Пример:
https://example.com/?id=ID&type=GameID&language=LanguageCode&mode=free
- id, тип, язык всегда присутствуют
- не является обязательным.
Ответы
Ответ 1
Я просто тестировал его с WCF 4, и он работал без проблем. Если я не использую режим в строке запроса, я получу значение null в качестве значения параметра:
[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"];
Ответ 2
Я попытался с дополнительными параметрами в спокойной веб-службе,
Если мы ничего не передаем в значении параметра, оно остается равным нулю. После этого мы можем проверить
нулевой или пустой функции. Если это null, то не используйте его, иначе вы можете его использовать.
Скажем, у меня ниже кода
[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;
}
}
Вы также можете сделать преобразование в соответствии с вашими требованиями.
Ответ 3
Вы должны использовать "?" затем "/" в вашем URL.
Пример:
[WebGet(UriTemplate = "GetSample/?OptionalParamter={value}")]
string GetSample(string part1);