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 });
        }
    }  

そして、私の投稿方法は次のようになりますが、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 のグループとタグの間に区切り文字が必要です。そうしないとあいまいになります (最初の文字列がどこで終わり、2 番目の文字列がどこで始まるかを判断することは不可能です)。UriTemplate「/AddTagToGroup/{group}/{tag}」に調整します。

また、WebInvokeデフォルトでPOSTは が必要ないため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 に答える