WCF and optional parameters

chobo picture chobo · Apr 25, 2011 · Viewed 32k times · Source

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 
  • id, type, language are always present
  • mode is optional

Answer

Ladislav Mrnka picture Ladislav Mrnka · Apr 25, 2011

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"];