我可以使用UriTemplate将非字符串传递给WCF RESTful服务吗?


72

我可以做以下事情吗?

[OperationContract]
[WebGet(UriTemplate = "/foo/{id}")]
string GetFoo(int id);

我希望我的服务既可以充当RESTful服务,又可以充当RPC样式的SOAP服务。如果可能的话,我想将int保留为int,而不是手动进行解析。

Answers:


69

如果我没记错的话,使用WebGet或WebInvoke时,路径中的UriTemplate变量始终解析为字符串。仅当UriTemplate变量位于UriTemplate的查询部分时,才可以将它们绑定到int,long等。


我正在使用锯齿状数组,并且正在显示此消息。有什么办法可以将锯齿状的数组传递给参数吗?我就是这样string MyMethod(string[][] jaggedArray);
Jamshaid K.


5

如其他人所述,必须使用查询字符串才能传递非字符串参数。下面的文章详细介绍了如何完成解析。

WCF可扩展性– QueryStringConverter

回到“适当的” 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]属性的类型转换器都可以在字符串之间来回转换(下面有更多介绍)。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.