2012-04-07 6 views
1

Im Versuch, eine POST-Methode für meine AddTagtoGroupwie zwei Strings POST?

, die so (noch altho als String-Gruppe scheint verwirrt nie verwendet werden) sieht zu erstellen:

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

Und mein post-Methode sieht wie folgt aus, aber im unsicher, was in die uri-Vorlage zu legen?

Oder bin ich verwirrt mit GET und alles kann in der Vorlage uri gehen?

Altho auf meinem Beitrag läuft mit nur bare wie die Nachricht Formatt ich den Fehler erhalten, dass mein Betrieb Vertrag so geändert gewickelt werden muss ich das WebMessageFormat.Wrapped

Die uri Vorlage ich nur auf UriTemplate="/AddTagtoGroup" es aber im läuft Ich bin mir nicht sicher, ob ich etwas dazu schreiben kann oder kann ich? Wie ich etwas sage verwirrt mit GET & POST.

Antwort

1

Wenn Sie erholsam sein möchten, haben Sie ein paar Möglichkeiten.

Wenn es nur Zeichenfolgen sind, möchten Sie es wie folgt definieren. Beachten Sie, dass keine Datenverträge erforderlich sind. Der Nachteil ist, dass wenn Sie 100 Tags haben, Sie 100 Anrufe tätigen müssen.

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

Um Batch ihnen, können Sie folgendes tun:

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

Nun gibt es einige Probleme, auch mit diesem, insbesondere, wenn Sie Ihre Nutzlast möchten selbst zu beschreiben, wie:

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

In diesem Fall habe ich einen Datenvertrag Tag definieren würden, wie Sie es getan haben und wie folgt buchen:

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

Oder die Tags Anfrage wickeln wie folgt:

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

} 

und die Signatur wie folgt definieren:

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

haben die Wahl wirklich. Die WCF-REST-Hilfeseite gibt Ihnen das genaue Format zum Posten.

1

Sie benötigen ein Trennzeichen zwischen Gruppe und Tag in Ihrem URI, sonst ist es mehrdeutig (es ist unmöglich zu sagen, wo die erste Zeichenfolge endet und die zweite beginnt). Passen Sie Ihre UriTemplate an "/ AddTagToGroup/{group}/{tag}".

Auch WebInvoke standardmäßig POST so brauchen Sie nicht Method="POST", und ich bin mir nicht sicher, warum Sie all diese anderen Attribute benötigen.