1

我试图为我的 AddTagtoGroup 创建一个 POST 方法

看起来像这样(尽管似乎从未使用过字符串组,但仍然感到困惑):

    List<Group> Groups = new List<Group>();
    List<Tag> tags = new List<Tag>();
    public void AddTagtoGroup(string group, string tag)
    {
        var result = Groups.Where(n => String.Equals(n.GroupName, tag)).FirstOrDefault();
        if (result != null)
        {
            result.Tags.Add(new Tag() { TagName = tag });
        }
    }  

我的 post 方法看起来像这样,但我不确定在 uri 模板中放什么?

        [OperationContract]
        [WebInvoke(Method = "POST",
 BodyStyle = WebMessageBodyStyle.Bare, 
RequestFormat = WebMessageFormat.Xml, 
ResponseFormat = WebMessageFormat.Xml, 
UriTemplate = "/AddTagtoGroup{group}{tag}")]
        void AddTagtoGroup(string group, string tag);

还是我对 GET 感到困惑并且 uri 模板中可以包含任何内容?

在运行我的帖子时,就像bare消息格式一样,我收到错误消息说我的操作合同必须被包装,所以我将其更改为WebMessageFormat.Wrapped

我刚刚设置的 uri 模板UriTemplate="/AddTagtoGroup"运行但我不确定我是否可以向它发布任何内容,或者我可以吗?就像我说的对 GET & POST 有点困惑。

4

2 回答 2

1

您需要在 URI 中的 group 和 tag 之间使用分隔符,否则它会模棱两可(无法分辨第一个字符串在哪里结束,而第二个字符串从哪里开始)。将您的调整UriTemplate为“/AddTagToGroup/{group}/{tag}”。

此外,WebInvoke默认为POSTso you don't need Method="POST",我不确定你为什么需要所有其他属性。

于 2012-04-07T11:49:21.013 回答
1

如果你想安静,你有几个选择。

如果它只是字符串,你想定义它如下。请注意,不需要数据合同。不利的一面是,如果您有 100 个标签,则必须进行 100 次调用。

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/groups/{group}/tags")
public void AddTagsToGroup(string groupName, string tag)
{
  // do what you need to do
}

要批量处理它们,您可以执行以下操作:

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/groups/{group}/tags")
public void AddTagsToGroup(string groupName, string[] tags)
{
  // do what you need to do
}

现在,这也存在一些问题,特别是如果您希望您的有效负载能够自我描述,例如:

<Tags> 
   <Tag>tag1</Tag>
   <Tag>tag2</Tag>
</Tags>

在这种情况下,我会像您一样定义一个数据合同标签并将其发布如下:

[WebInvoke(Method = "POST", UriTemplate = "/groups/{group}/tags")
public void AddTagsToGroup(string groupName, Tag[] tags)
{
  // do what you need to do
}

或者包装标签请求如下:

[CollectionDataContract]
public class Tags : List<Tag>
{

}

并定义签名如下:

[WebInvoke(Method = "POST", UriTemplate = "/groups/{group}/tags")
public void AddTagsToGroup(string groupName, Tags tags)
{
  // do what you need to do
}

选择真的是你的。WCF REST 帮助页面将为您提供要发布的确切格式。

于 2012-04-07T11:53:09.907 回答