2010-06-17 9 views
0

Je suis en train de plonger dans le monde des services Web RESTful et ont commencé avec le modèle suivant:Impossible d'appeler RESTful méthodes de services Web

[ServiceContract] 
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] 
public class Test { 
    // TODO: Implement the collection resource that will contain the SampleItem instances 

    [WebGet(UriTemplate = ""), OperationContract] 
    public List<SampleItem> GetCollection() { 
    // TODO: Replace the current implementation to return a collection of SampleItem instances 
    return new List<SampleItem>() {new SampleItem() {Id = 1, StringValue = "Hello"}}; 
    } 

    [WebInvoke(UriTemplate = "", Method = "POST"), OperationContract] 
    public SampleItem Create(SampleItem instance) { 
    // TODO: Add the new instance of SampleItem to the collection 
     throw new NotImplementedException(); 
    } 

    [WebGet(UriTemplate = "{id}"), OperationContract] 
    public SampleItem Get(string id) { 
     // TODO: Return the instance of SampleItem with the given id 
     throw new NotImplementedException(); 
    } 

    [WebInvoke(UriTemplate = "{id}", Method = "PUT"), OperationContract] 
    public SampleItem Update(string id, SampleItem instance) { 
     return new SampleItem { 
       Id = 99, 
       StringValue = "Done" 
      }; 
    } 

    [WebInvoke(UriTemplate = "{id}", Method = "DELETE"), OperationContract] 
    public void Delete(string id) { 
     // TODO: Remove the instance of SampleItem with the given id from the collection 
     throw new NotImplementedException(); 
    } 
} 

Je suis en mesure d'effectuer l'opération GET, mais je ne peux pas effectuer des demandes PUT, POST ou DELETE.

Quelqu'un peut-il m'expliquer comment effectuer ces opérations et comment créer les URL correctes?

Meilleures salutations

Alessandro

Répondre

0

Pour autant que je sache, WebInvoke prend en charge que GET et POST à ​​ce moment. J'utilise POST pour effectuer des actions PUT et DELETE à la place.

+0

Pourriez-vous s'il vous plaît écrivez-moi un exemple sur la façon d'écrire la demande pour cette méthode? [WebInvoke (UriTemplate = "", Method = "POST"), OperationContract] public SampleItem Create (instance SampleItem) .... Je ne peux pas écrire une requête et obtenir la réponse. Cordialement Alessandro – Alex

+0

@Alex, avez-vous même lu ce que dit Zeaxif? – Polaris878

+1

@Alex, @ Polaris878, GET, POST, PUT et DELETE sont tous valides. Vous pouvez trouver plusieurs exemples en utilisant Google. En voici un: http://www.informit.com/articles/article.aspx?p=1173045&seqNum=4 – Patrick

0

EDIT - Mise à jour en réponse à votre réponse:

URL est « http://localhost/test/Test.svc/MethodName »
postData est les données que vous voulez passer comme paramètre.

Dans votre cas, il semble que vous essayez de transmettre un type. Rappelez-vous que ceci est posté dans une URL. Brisez les valeurs du type en paramètres.

Exemple: « http://localhost/test/Test.svc/Create?id=123456&stringValue=newSampleItem »

Vous aurez besoin de changer le contrat d'exploitation d'accepter un int et une chaîne au lieu d'un SampleItem.

[WebInvoke(UriTemplate = "Create?id={x}&stringValue={y}", Method = "POST"), OperationContract] 
    public SampleItem Create(int id, string stringValue) 
    { 
     // Create and return the Sample Item. 
    } 

Faites-moi savoir comment ça se passe.

Patrick.

Salut Alex, ce que j'utilise pour poster à un service ... Restful

// Create the request 
WebRequest request; 
request = WebRequest.Create(url + postData); 
request.Method = "POST"; 

byte[] byteArray = Encoding.UTF8.GetBytes(postData); 
request.ContentType = "application/x-www-form-urlencoded"; 
request.ContentLength = byteArray.Length; 

// Get the request stream. 
Stream dataStream = request.GetRequestStream(); 

// Write the data to the request stream. 
dataStream.Write(byteArray, 0, byteArray.Length); 

// Close the Stream object. 
dataStream.Close(); 

// Process the response 
Stream responseStream; 
responseStream = request.GetResponse().GetResponseStream(); 

StreamReader objReader = new StreamReader(responseStream); 

StringBuilder sb = new StringBuilder(); 
string sLine = ""; 
int i = 0; 

while (sLine != null) 
{ 
    i++; 
    sLine = objReader.ReadLine(); 
    sb.Append(sLine); 
} 

responseStream.Close(); 


string responseXML = sb.ToString() 

Bonne chance,

Patrick

Questions connexes