【问题标题】:Can I pass non-string to WCF RESTful service using UriTemplate?我可以使用 UriTemplate 将非字符串传递给 WCF RESTful 服务吗?
【发布时间】: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


    【解决方案1】:

    正如 dthrasher 提到的,将 id 移动到 URI 的查询部分。这对我有用:

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

    有关 URI 不同部分的更多信息,请参阅维基百科上的“URI 方案”: http://en.wikipedia.org/wiki/URI_scheme

    【讨论】:

    • 谢谢!这也会按特定顺序删除参数的 req。
    • 感谢您提供示例。
    【解决方案2】:

    如果我没记错的话,路径中的 UriTemplate 变量在使用 WebGet 或 WebInvoke 时总是解析为字符串。当 UriTemplate 变量位于 UriTemplate 的查询部分时,您只能将它们绑定到 int、long 等。

    【讨论】:

    • 我正在使用锯齿状数组,它正在显示此消息。有没有办法将锯齿状数组传递给参数?我正在这样做string MyMethod(string[][] jaggedArray);
    【解决方案3】:

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

    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] 属性带有类型转换器,可以转换 输入和输出字符串(更多内容见下文)。

    【讨论】:

      【解决方案4】:

      很遗憾,如果您想使用UriTemplate,则必须自己进行解析。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-07
        • 2010-10-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-23
        • 2013-07-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多