我正在使用 .Net 4.0 创作一个 RESTful WCF 服务。我想要以下两个网址:
/root/document/{ids}?fields={fields}
/root/externaldocument/{ids}?fields={fields}
映射到相同的接口成员:
Documents GetDocuments(string ids, string fields)
我尝试将通配符放入文字 URL 段:
[OperationContract]
[WebGet(UriTemplate = "/root/*document/{ids}?fields={fields}")]
Documents GetDocuments(string ids, string fields)
但是,这是无效的,我得到以下异常:
The UriTemplate '/root/*document/{ids}?fields={fields}' is not valid; the
wildcard ('*') cannot appear in a variable name or literal... Note that a
wildcard segment, either a literal or a variable, is valid only as the last
path segment in the template
如果我将通配符段包装在模板大括号中:
[OperationContract]
[WebGet(UriTemplate = "/root/{*document}/{ids}?fields={fields}")]
Documents GetDocuments(string ids, string fields)
然后我得到一个异常,因为方法参数中没有这样的输入参数:
Operation 'GetDocuments' in contract 'IAPIv2' has a UriTemplate that expects a
parameter named 'DOCUMENTS', but there is no input parameter with that name
on the operation.
我的解决方法是简单地有两个条目,指向不同的方法,然后让这些方法调用一个通用实现:
[OperationContract]
[WebGet(UriTemplate = "/root/document/{ids}?fields={fields}")]
Documents GetDocuments(string ids, string fields)
[OperationContract]
[WebGet(UriTemplate = "/root/externaldocument/{ids}?fields={fields}")]
Documents GetExternalDocuments(string ids, string fields)
但这似乎有点丑陋。
我已阅读文档,无法找到这一点的具体地址。有什么方法可以在 WCF 中使用通配符文字段吗?或者这在 WCF 中是不可能的吗?