2010-10-16 10 views
0

je définissais une implémentation WCF de service REST:Comment consommer service REST en utilisant http POST

enter code here 
[ServiceContract] 
public interface IService 
{ 
    [OperationContract] 
    [WebGet(UriTemplate = "customers/{id}", ResponseFormat = WebMessageFormat.Json)] 
    Customer GetCustomer(string id); 

    [OperationContract] 
    [WebInvoke(UriTemplate = "customers", ResponseFormat = WebMessageFormat.Json)] 
    Customer PostCustomer(Customer c); 
} 


public class Service : IService 
{ 
    public Customer GetCustomer(string id) 
    { 
     return new Customer { ID = id, Name = "Demo User" }; 
    } 

    public Customer PostCustomer(Customer c) 
    { 
     return new Customer { ID = c.ID, Name = "Hello, " + c.Name }; 
    } 
} 


[DataContract(Namespace = "")] 
public class Customer 
{ 
    [DataMember] 
    public string ID { get; set; } 
    [DataMember] 
    public string Name { get; set; } 
} 

L'opération Get est facile. Sans la génération de proxy côté client, je ne suis pas sûr de savoir comment utiliser le service POST. Tout échantillon de code sera apprécié!

Répondre

0

Si vous avez l'objet client sur le côté client aussi, vous pouvez utiliser les bibliothèques Microsoft.Http et à faire:

var client = new HttpClient() 
var customer = new Customer() {ID=2, Name="Foo"}; 
var content = HttpContent.CreateJsonDataContract<Customer>(customer); 
client.Post(new Uri("http://example.org/customers"),content); 

si vous voulez éviter d'utiliser un objet client, vous pouvez simplement construire le JSON en tant que chaîne, puis créez le contenu comme ceci:

var content = HttpContent.Create("{...Json...}", "application/json"); 
+0

J'ai installé WCF REST StarterKit Preview 2 et ajouté la référence Microsoft.Http. Mais le HttpContent n'a pas CreateJsonDatContract? – Icerman

+0

@Icerman Il est dans la DLL Microsoft.Http.Extensions –

+0

Après avoir changé pour HttpContentExtensions.CreateJsonDataContract(), cela a fonctionné. Merci! – Icerman