Я только что протестировал его с 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"];