2012-02-04 4 views
1

Je dois créer un service REST avec une méthode POST avec 4 paramètres de chaîneWCF méthode REST service POST

Je l'ai défini comme ci-dessous:

[WebInvoke(UriTemplate = "/", Method = "POST", BodyStyle= WebMessageBodyStyle.WrappedRequest)] 
public Stream ProcessPost(string p1, string p2, string p3, string p4) 
{ 
    return Execute(p1, p2, p3, p4); 
} 

Et je veux l'appeler avec le code comme suit :

 string result = null; 
     HttpWebRequest req = WebRequest.Create(url) as HttpWebRequest; 
     req.Method = "POST"; 
     req.ContentType = "application/x-www-form-urlencoded"; 

     string paramz = string.Format("p1={0}&p2={1}&p3={2}&p4={3}", 
      HttpUtility.UrlEncode("str1"), 
      HttpUtility.UrlEncode("str2"), 
      HttpUtility.UrlEncode("str3"), 
      HttpUtility.UrlEncode("str4") 
      ); 

     // Encode the parameters as form data: 
     byte[] formData = 
      UTF8Encoding.UTF8.GetBytes(paramz); 
     req.ContentLength = postData.Length; 

     // Send the request: 
     using (Stream post = req.GetRequestStream()) 
     { 
      post.Write(formData, 0, formData.Length); 
     } 

     // Pick up the response: 
     using (HttpWebResponse resp = req.GetResponse() 
             as HttpWebResponse) 
     { 
      StreamReader reader = 
       new StreamReader(resp.GetResponseStream()); 
      result = reader.ReadToEnd(); 
     } 

     return result; 

Cependant, le code client renvoie le code 400: Bad demande

Que dois-je faire mal?

Merci

+0

Essayez d'activer le traçage WCF pour voir quel est le problème, mais je pense que le service s'attend à XML –

Répondre

1

Je dirais que déclarer les paramètres UriTemplate comme ci-dessous

[OperationContract] 
[WebInvoke(UriTemplate = "{p1}/{p2}/{p3}/{p4}", Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest)] 
string ProcessPost(string p1, string p2, string p3, string p4); 

Et utiliser le code ci-dessous pour invoquer,

string result = null; 
string uri = "http://localhost:8000/ServiceName.svc/1/2/3/4"; 

HttpWebRequest req = WebRequest.Create(uri) as HttpWebRequest; 
req.KeepAlive = false; 
req.Method = "POST"; 

using (HttpWebResponse resp = req.GetResponse() as HttpWebResponse) 
    { 
     StreamReader reader = new StreamReader(resp.GetResponseStream()); 
     result = reader.ReadToEnd(); 
    } 

Il fonctionne très bien pour moi. J'espère que cette approche est utile.