Avantages de WebInvoke POST par rapport à WEBGET
bonjour j'ai trouvé un des exemples de la wcf REST avec un WEBINVOKE méthode comme les suivantes
[OperationContract]
[WebInvoke(
BodyStyle=WebMessageBodyStyle.Bare,
Method="POST",
RequestFormat=WebMessageFormat.Xml,
ResponseFormat=WebMessageFormat.Xml,
UriTemplate="CreateStudent/{StudentName}/{Chair}/{AverageNote}")]
int Insert(string StudentName, string Chair, string AverageNote);
[OperationContract]
[WebGet(
BodyStyle= WebMessageBodyStyle.Bare,
RequestFormat = WebMessageFormat.Xml,
ResponseFormat = WebMessageFormat.Xml)]
Student[] GetAllStudents();
ma question est puis-je utiliser WEBGET méthode au lieu de WEBINVOKE comme ci-dessous et quelle est exactement la différence betwenn WEBINVOKE POST et WEBGET,
selon mon observation que nous allons envoyer les paramètres par ajout de chaînes de requête dans l'URI de Modèles pour les deux WEbGet et WebInvoke POST, quels sont les avantages que nous pouvons obtenir de l'aide WebInvoke POST, nous ne pouvons pas obtenir l'aide de WEBGET
[OperationContract]
[WebGet(
BodyStyle=WebMessageBodyStyle.Bare,
RequestFormat=WebMessageFormat.Xml,
ResponseFormat=WebMessageFormat.Xml,
UriTemplate="CreateStudent/{StudentName}/{Chair}/{AverageNote}")]
int Insert(string StudentName, string Chair, string AverageNote);
Vous devez vous connecter pour publier un commentaire.
C'est une très grosse différence. Tout d'abord le REPOS est généralement utilisé avec ces verbes HTTP:
Vous ne devez jamais utiliser les OBTENIR pour n'importe quoi d'autre puis de la récupération d'objets. À l'aide de HTTP GET pour la modification des données est considéré comme une mauvaise pratique dans l'ensemble du développement web. Pour déclencher l'OBTENIR il vous suffit de créer un lien sur la page web ou tout simplement tapez une URL dans le navigateur. Vous allez cliquer sur "actualiser" 50 fois et vous avez 50 inserts. Modification de données doit toujours être fait avec la POSTE. Si vous avez la forme qui déclenche HTTP POST (Post ne peut pas être déclenché directement) et vous cliquer sur "actualiser" du navigateur vous demandera probablement si vous souhaitez que le formulaire à nouveau être soumise = si vous voulez vraiment de poste et de traiter les données pour le serveur.
Un autre problème est que la demande peut être mis en cache et la redirection mais POSTER des demandes ne peut.
Ce lien devrait fournir plus de perspicacité dans les réponses fournies:
http://blog.markkoltnuk.com/2011/02/14/understanding-wcf-webinvokewebget-attributes/
Permet d'expliquer, une fois pour toutes, ce qu'est la différence entre WebInvoke & WebGet.
WebGet (Couramment utilisé pour récupérer les données)
La WebGet attribut expose des opérations en utilisant le verbe GET. Vous pouvez accéder à l'ordinateur d'extrémité est directement via un navigateur Web en tapant l'URI du service dans la barre d'adresse. Les paramètres peuvent être envoyés à l'intérieur de l'URI, soit en tant que paramètres de chaîne de requête ou incorporé dans l'URI. Le WebGet attribut doit être utilisé uniquement pour la récupération des données en raison de ses capacités de mise en cache.
WebInvoke (Couramment utilisé pour les données d'entrée/de mise à jour)
Le WebInvoke attribut expose des services à l'aide d'autres verbes comme POST, PUT et DELETE. POST est la valeur par défaut mais il peut être modifié par le réglage de la Méthode de la propriété de l'attribut. Le WebInvoke attribut doit être utilisé uniquement pour les données d'entrée/de mise à jour.
Pour répondre à votre question, je vous recommande de comprendre le protocole HTTP sémantique, en particulier les Verbes HTTP, tels que GET, POST, PUT, DELETE
HTTP GET est fait pour récupérer des ressources à partir de n'importe quel endroit et, par conséquent, la demande ne devrait pas modifier l'état de la ressource.
HTTP POST est utilisée pour créer et parfois de mise à jour de contenu, et a donc été utilisé dans la méthode d'Insertion ci-dessus.
Si vous exécutez le service WCF ci-dessus et de voir comment sont ces demande formée et le serveur, vous verriez qui n'ont pas de corps de la charge utile alors que le POST est. En cas de POST le corps contient le contenu qui doit être créée\mise à jour.