WCF Restful端点配置以传递多个值

时间:2012-07-06 13:01:08

标签: c# asp.net wcf

我创建了一个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并在UriTemplate中添加webInvoke属性。例如

[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

有可能吗?

等待您的宝贵回应..

谢谢..

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

您必须创建两种方法:

[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)
{
}