【发布时间】:2010-10-07 10:55:47
【问题描述】:
我可以执行以下操作吗?
[OperationContract]
[WebGet(UriTemplate = "/foo/{id}")]
string GetFoo(int id);
我希望我的服务既可以用作 RESTful 服务,也可以用作 RPC 样式的 SOAP 服务。 如果可能的话,我想将 int 保留为 int,而不是手动解析。
【问题讨论】:
标签: .net wcf web-services rest
我可以执行以下操作吗?
[OperationContract]
[WebGet(UriTemplate = "/foo/{id}")]
string GetFoo(int id);
我希望我的服务既可以用作 RESTful 服务,也可以用作 RPC 样式的 SOAP 服务。 如果可能的话,我想将 int 保留为 int,而不是手动解析。
【问题讨论】:
标签: .net wcf web-services rest
正如 dthrasher 提到的,将 id 移动到 URI 的查询部分。这对我有用:
[OperationContract]
[WebGet(UriTemplate = "/foo?id={id}")]
string GetFoo(int id);
有关 URI 不同部分的更多信息,请参阅维基百科上的“URI 方案”: http://en.wikipedia.org/wiki/URI_scheme
【讨论】:
如果我没记错的话,路径中的 UriTemplate 变量在使用 WebGet 或 WebInvoke 时总是解析为字符串。当 UriTemplate 变量位于 UriTemplate 的查询部分时,您只能将它们绑定到 int、long 等。
【讨论】:
string MyMethod(string[][] jaggedArray);
正如其他人提到的,您必须使用查询字符串才能传递非字符串参数。下面的文章详细介绍了解析是如何完成的。
WCF Extensibility – QueryStringConverter
回到“正确” WCF 可扩展性,本周的帖子是关于 QueryStringConverter 的。 这实际上是一个简单的话题,因为它的目的很 特定的(与之前看到的其他可扩展点不同,它可以 可用于多种情况)——在 WCF QueryStringConverter 仅用于具有 WebHttpBehavior 应用于它们。即使在那些,也只有在操作上 具有通过查询字符串传递的参数(任一操作 带有标有 [WebGet] 的参数或带有 [WebInvoke] 操作的 将某些参数显式绑定到查询的 UriTemplate 细绳)。 QueryStringConverter 是可以在 操作参数及其在查询字符串中的表示。
...
WebHttpBehavior 使用的默认 QueryStringConverter 支持 原生几种类型,包括所有简单的数字类型 (Byte, SByte,Int16,Int32,Int64,UInt16,UInt32,UInt64,单,双, 十进制)、布尔值、字符、对象、字符串、日期时间、日期时间偏移量、 TimeSpan、Guid、Uri 和 Byte 数组(本质上是所有类型 DataContractSerializer 认为是“原语”,其中 XmlQualifiedName 除外)。 枚举类型也是 默认支持(枚举值的字符串表示为 用过的)。最后,还有另一组支持的类型 默认情况下 QueryStringConverter – 任何声明一个 [TypeConverter] 属性带有类型转换器,可以转换 输入和输出字符串(更多内容见下文)。
【讨论】:
很遗憾,如果您想使用UriTemplate,则必须自己进行解析。
【讨论】: