Search code examples
wcfquery-stringuriuritemplate

Optional query string parameters in URITemplate in WCF?


I'm developing some RESTful services in WCF 4.0. I've got a method as below:

[OperationContract]
    [WebGet(UriTemplate = "Test?format=XML&records={records}", ResponseFormat=WebMessageFormat.Xml)]
    public string TestXml(string records)
    {
        return "Hello XML";
    }

So if i navigate my browser to http://localhost:8000/Service/Test?format=XML&records=10, then everything works as exepcted.

HOWEVER, i want to be able to navigate to http://localhost:8000/Service/Test?format=XML and leave off the "&records=10" portion of the URL. But now, I get a service error since the URI doesn't match the expected URI template.

So how do I implement defaults for some of my query string parameters? I want to default the "records" to 10 for instance if that part is left off the query string.


Solution

  • Note: This question is out of date, please see the other answers.


    This does not appear to be supported.

    However, Microsoft has been made aware of this issue and there is a work-around:

    You can get the desired effect by omitting the Query string from the UriTemplate on your WebGet or WebInvoke attribute, and using WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters from within your handlers to inspect, set defaults, etc. on the query parameters.

    https://connect.microsoft.com/VisualStudio/feedback/details/451296/