I just started using WCF with REST and UriTemplates. Is it now possible to use optional parameters?
If not, what would you guys recommend I do for a system that has three parameters that are always used in the url, and others that are optional (varying amount)?
Example:
https://example.com/?id=ID&type=GameID&language=LanguageCode&mode=free
I just tested it with WCF 4 and it worked without any problems. If I don't use mode in query string I will get null as parameter's value:
[ServiceContract]
public interface IService
{
[OperationContract]
[WebGet(UriTemplate = "GetData?data={value}&mode={mode}")]
string GetData(string value, string mode);
}
Method implementation:
public class Service : IService
{
public string GetData(string value, string mode)
{
return "Hello World " + value + " " + mode ?? "";
}
}
For me it looks like all query string parameters are optional. If a parameter is not present in query string it will have default value for its type => null
for string
, 0 for int
, etc. MS also states that this should be implemented.
Anyway you can always define UriTemplate
with id
, type
and language
and access optional parameters inside method by WebOperationContext
:
var mode = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters["mode"];