WCF中的URITemplate中可选的查询string参数?
我正在WCF 4.0中开发一些RESTful服务。 我有一个方法如下:
[OperationContract] [WebGet(UriTemplate = "Test?format=XML&records={records}", ResponseFormat=WebMessageFormat.Xml)] public string TestXml(string records) { return "Hello XML"; }
所以,如果我浏览浏览器到http:// localhost:8000 / Service / Test?format = XML&records = 10 ,那么所有东西都按预期工作。
但是,我希望能够导航到http:// localhost:8000 / Service / Test?format = XML,并离开URL的“&records = 10”部分。 但是现在,由于URI与预期的URI模板不匹配,我得到一个服务错误。
那么如何实现一些我的查询string参数的默认值? 我想默认的“logging”为10例如,如果该部分被closures查询string。
注意:这个问题已经过时了,请看其他答案。
这似乎并不支持。
但是,微软已经意识到这个问题,并有一个解决方法:
您可以通过从WebGet或WebInvoke属性的UriTemplate中省略查询string,并在处理程序中使用WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters来查询,设置默认等查询参数来获得所需的效果。
https://connect.microsoft.com/VisualStudio/feedback/details/451296/
根据这个答案,这是在.NET 4.0中修复的。 无法提供查询string参数似乎导致它被赋予该types的默认值。
检查这篇博客文章。 对我有意义,并带有一个类来parsing查询string参数。
基本上不要在UriTemplate中定义查询string参数,以便与/不使用参数匹配,如果在方法实现中存在,则使用样本类检索它们。
是的,我可以在WCF 4.0之后确认它是否像WCF和可选参数中描述的那样起作用
这似乎在WCF 4.0中工作。
只要确保在您的“Service1.svc.cs”中设置您的默认值
public string TestXml(string records) { if (records == null) records = "10"; //... rest of the code }