1

我创建了一个 WCF restful 服务,它以基本上是一个字符串的 xml 格式返回组信息。要获取此信息,我需要传递两个参数,例如 PersonId 和 GroupId - 都是字符串。在这里,一个人可以拥有多个组。逻辑是,如果我同时传递 - PersonId 和 GroupId,那么它将仅返回该组的特定信息,但如果我不传递 GroupId,则该方法将返回该人的所有组。到目前为止,我通过 get 方法使用此服务,例如

localhost/service/service.svc/getGroupInfo?PersonId=A100&GroupId=E100

or 

localhost/service/service.svc/getGroupInfo?PersonId=A100&GroupId=

界面如下:

[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
string getGroupInfo(string PersonId, string GroupId);

它给了我预期的准确结果。然后我尝试使其成为 RESTFull 并UriTemplatewebInvoke. 例如

[OperationContract]
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare,UriTemplate = "getGroupInfo/{PersonId}/{GroupId}")]
    string getGroupInfo(string PersonId, string GroupId);

让我的服务像 RESTfull

localhost/service/service.svc/getGroupInfo/A100/E100

它工作正常。但现在我的问题已经开始了。如果我没有设置 GroupId,它会给出服务未找到或错误请求错误。我想选择设置 groupId 。例如

对于单组

localhost/service/service.svc/getGroupInfo/A100/E100

对于所有组

localhost/service/service.svc/getGroupInfo/A100

可能吗?

等待您的宝贵回复..

谢谢..

4

2 回答 2

1

您可以将模板更改为“getGroupInfo/{PersonId}/{GroupId=null}”,但我相信在查询所有组时,您的 URL 中仍需要尾部反斜杠

localhost/service/service.svc/getGroupInfo/A100/
于 2012-07-06T14:27:45.010 回答
0

您必须创建 2 个方法:

[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare,UriTemplate = "getGroupInfo/{PersonId}")]
string getGroupInfo(string PersonId)
{
    return getGroupInfo(PersonId, null);
}

[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare,UriTemplate = "getGroupInfo/{PersonId}/{GroupId}")]
string getGroupInfo(string PersonId, string GroupId)
{
}

要使用可选参数,您必须使用“?”

[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare,UriTemplate = "getGroupInfo/{PersonId}?GroupId={GroupId}")]
string getGroupInfo(string PersonId, string GroupId)
{
}
于 2013-02-12T10:43:43.460 回答