我正在尝试为我的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 });
}
}
我的帖子方法看起来像这样,但我不确定要放在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
我刚刚设置为UriTemplate="/AddTagtoGroup"
的uri模板运行但是我不确定我是否可以实际发布任何内容,或者我可以吗?就像我说GET&amp; POST。
答案 0 :(得分:1)
你的URI中需要在group和tag之间有一个分隔符,否则它是不明确的(不可能分辨出第一个字符串结束的位置和第二个字符串的开头)。将UriTemplate
调整为“/ AddTagToGroup / {group} / {tag}”。
此外,WebInvoke
默认为POST
,因此您不需要Method="POST"
,而且我不确定您为何需要所有其他属性。
答案 1 :(得分: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帮助页面将为您提供要发布的确切格式。