Salut à tous et merci pour votre temps à l'avance.Problème lors de l'implémentation de WebInvoke Method = "POST" pour un service REST sur WCF
J'ai un problème en essayant de travailler une méthode REST sous WCF. La méthode est POST, et je ne suis pas en mesure de récupérer les valeurs envoyées à partir de la demande.
Voilà comment je déclare le service selon un exemple de Microsoft sur le WebInvokeAttribute Class:
[OperationContract]
[WebInvoke(
Method = "POST" ,
BodyStyle = WebMessageBodyStyle.Bare ,
UriTemplate = "/sum?x={x}&y={y}" ,
ResponseFormat = WebMessageFormat.Xml)]
ResponseData Sum(string x, string y);
Voilà comment je mis en œuvre cette fonction dans la classe:
public ResponseData Sum(string x , string y)
{
ResponseData retorn = new ResponseData();
int _x = 0;
int _y = 0;
try
{
_x = Convert.ToInt32(x);
_y = Convert.ToInt32(y);
retorn.Data = _x + _y + "";
}
catch (Exception ex)
{
retorn.Data = "";
retorn.Error = true;
retorn.MsgError = ex.Message;
}
return retorn;
}
responseData est une classe implémentation de DataContract:
[DataContract]
public class ResponseData
{
private bool error = false;
private string msgError = "";
[DataMember]
public string Data { get; set; }
[DataMember]
public bool Error
{
get
{
return error;
}
set
{
error = value;
}
}
[DataMember]
public string MsgError
{
get
{
return msgError;
}
set
{
msgError = value;
}
}
}
Comme vous pouvez e, un exemple assez simple.
Le problème est que cela ne fonctionne pas. Tha paramètres x et y des fonctions ont toujours une valeur nulle, peu importe ce que je vous envoie le long de la demande, de sorte que le message de retour est toujours:
<responsedata xmlns="http://schemas.datacontract.org/2004/07/RestServiceProvaCrypto" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><data>0</data><error>false</error><msgerror></msgerror></responsedata>
Donc ma question est, ce que je Je fais mal parce que je ne peux pas obtenir les valeurs passées par la demande pour x et y?
Je travaille avec VS 2008 et .Net 3.5.
Encore une fois, merci pour votre temps.
Ramon M. Gallart
Pouvez-vous montrer comment vous envoyez la demande? –
Salut Darrel, par exemple, d'un formulaire HTML dont l'action est POST et a 2 zones de texte nommées 'x' et 'y'. J'ai récemment vu en utilisant Fiddler2 que la création d'une URL comme .../sum? X = 1 & y = 2 le serveur renvoie une réponse correcte tandis que la même URL envoyée à partir d'un navigateur Web renvoie la méthode Invalid. Aussi, ce que je voudrais, c'est passer les valeurs non de l'url, mais comme le corps de la requête comme cela serait dans une requête post. Mais en utilisant Fiddler2 de cette manière ou en envoyant un post, le résultat est ce que j'ai mentionné dans le post, null pour x et y. Merci pour votre temps. –