我可以做以下事情吗?
[OperationContract]
[WebGet(UriTemplate = "/foo/{id}")]
string GetFoo(int id);
我希望我的服务既可以充当RESTful服务,又可以充当RPC样式的SOAP服务。如果可能的话,我想将int保留为int,而不是手动进行解析。
Answers:
如dthrasher所述,将id移到URI的查询部分。这对我有用:
[OperationContract]
[WebGet(UriTemplate = "/foo?id={id}")]
string GetFoo(int id);
有关URI不同部分的更多信息,请参见Wikipedia上的“ URI方案”:http : //en.wikipedia.org/wiki/URI_scheme
如其他人所述,必须使用查询字符串才能传递非字符串参数。下面的文章详细介绍了如何完成解析。
回到“适当的” WCF可扩展性,本周的帖子是关于QueryStringConverter的。这实际上是一个简单的主题,因为它的目的是非常特定的(与之前看到的其他可扩展性点不同,它可以用于多种情况)–在WCF中,QueryStringConverter仅用于应用了WebHttpBehavior的终结点上给他们。即使在那些操作中,也仅在具有通过查询字符串传递参数的操作上(带有参数标记为[WebGet]的操作或带有显式绑定一些参数到查询字符串的UriTemplate的[WebInvoke]操作)。QueryStringConverter是可以在操作参数及其在查询字符串中的表示形式之间进行转换的部分。
...
WebHttpBehavior使用的默认QueryStringConverter本机支持几种类型,包括所有简单的数字类型(Byte,SByte,Int16,Int32,Int64,UInt16,UInt32,UInt64,Single,Double,Decimal),布尔值,Char,Object,String,DateTime ,DateTimeOffset,TimeSpan,Guid,Uri和Byte数组(实际上,DataContractSerializer认为所有类型都是“原语”,XmlQualifiedName除外)。默认情况下也支持枚举类型(使用枚举值的字符串表示形式)。最后,还有另外一组默认QueryStringConverter支持的类型-任何使用类型转换器声明[TypeConverter]属性的类型转换器都可以在字符串之间来回转换(下面有更多介绍)。
string MyMethod(string[][] jaggedArray);