代码之家  ›  专栏  ›  技术社区  ›  Eugene Yokota

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

  •  68
  • Eugene Yokota  · 技术社区  · 17 年前

    我能做以下事情吗?

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

    如果可能的话,我希望将int保留为int,而不是手工解析。

    4 回复  |  直到 17 年前
        1
  •  79
  •   Cameron Taggart    17 年前

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

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

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

        2
  •  69
  •   dthrasher    17 年前

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

        3
  •  5
  •   Ohad Schneider    12 年前

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

    WCF Extensibility – QueryStringConverter

    这实际上是一个简单的主题,因为它的目的非常简单 可用于WCF内的各种情况) 这个 QueryStringConverter仅用于具有 WebHttpBehavior应用于它们。即使在这些情况下,也只是在操作上 (a)任何一项业务 将某些参数显式绑定到查询的UriTemplate 字符串)。QueryStringConverter是可以在 操作参数及其在查询字符串中的表示形式。

    ...

    本机支持多种类型,包括所有简单的数字类型 (字节, 十进制),布尔值,字符,对象,字符串,日期时间,日期时间偏移, TimeSpan、Guid、Uri和字节数组 DataContractSerializer将其视为基本体 XmlQualifiedName的例外)。 枚举类型也包括在内 默认支持 (枚举值的字符串表示形式为 使用)。最后,还支持另一组类型 默认情况下,QueryStringConverter声明 具有类型转换器的[TypeConverter]属性,该类型转换器可以转换 键入“到”和“从”字符串(详细信息如下)。

        4
  •  3
  •   Andrew Hare    17 年前

    不幸的是,如果要使用 UriTemplate

    推荐文章