HttpWebRequest PUT (ADO.NET Data Services Framework)
Les données déployées par ADO.NET Data Services peuvent être modifiées à l'aide d'une demande HTTP PUT. La plupart des valeurs des propriétés des instances de données peuvent être modifiées par cette méthode mais la propriété clé de toute instance de données ne peut pas être modifiée. La demande PUT peut être appliquée aux types d'entités, liens, propriétés de navigation et types complexes. Pour plus d'informations, consultez Méthode PUT (ADO.NET Data Services Framework).
Demande PUT pour mettre à jour une propriété unique
Les données qui seront modifiées par la demande PUT sont mises en forme en tant que chaîne qui devient partie intégrante du corps de la requête HTTP. Une demande PUT identifie tout d'abord l'entité Address
dans le AdventureWorksModel
avec ID=2
par l'URI : "https://localhost:50781/AdvWksSalesS.svc/Address(2)"
. Les modifications de la propriété AddressLine1
de l'entité Address
sont spécifiées par la syntaxe, "{AddressLine1:'1600 1st St.'}"
. Si l'entité à modifier fait partie d'une hiérarchie d'héritage, l'élément de syntaxe __metadata
est requis :
"{__metadata:{Uri:'/Address(2)/', " +
"Type:'AdventureWorksModel.Address'}, " +
"AddressLine1:'500 5th St.'}"
Un exemple complet qui utilise la syntaxe JSON pour représenter les données mises à jour pour la propriété AddressLine1
est illustré dans le bloc de code à la fin de cette description.
Le code met à jour la propriété AddressLine1
de l'entité Address
de AdventureWorksModel
. Une HttpWebRequest r
est créée avec l'URI de l'entité à modifier : https://localhost:50781/AdvWksSalesS.svc/Address(2)
, comme paramètre unique de son constructeur. Le corps de la requête, tel qu'il a déjà été décrit, est affecté à une chaîne nommée requestPayload
. La méthode est définie sur "PUT"
. ContentType
est affecté au protocole json
. La ligne r.Accept = "application/json"
indique au serveur qu'il doit renvoyer la réponse éventuelle codée à l'aide du protocole json
.
Si le service est protégé à l'aide d'un modèle d'authentification basé sur le transport, tel que l'Authentification de base HTTP, des informations d'identification peuvent être passées comme en affectant des informations d'identification à la demande. Pour cet exemple, des DefaultCredentials
sont utilisées.
La demande r
est mise en forme en tant que texte Unicode. Une variable UTF8Encoding est utilisée pour obtenir la longueur de la demande en octets afin d'écrire des données numériques dans l'objet Stream de la demande. L'objet HttpWebResponse
est affecté en appelant GetResponse
dans la demande. Le code r.GetResponse
envoie les données et obtient la réponse. Un autre objet de flux, rspStm
, est utilisé pour contenir les données retournées par GetResponseStream
.
HttpWebRequest r =
WebRequest.Create("https://localhost:50781/AdvWksSalesS.svc/Address(2)")
as HttpWebRequest;
// __metadata is only required if inheritance is used,
// but __metadata syntax is used for completeness. Simple syntax:
//string requestPayload = "{AddressLine1:'1600 1st St.'}";
string requestPayload = "{__metadata:{Uri:'/Address(2)/', " +
"Type:'AdventureWorksModel.Address'}, " +
"AddressLine1: '1600 1st St.'}";
r.Method = "PUT";
UTF8Encoding encoding = new UTF8Encoding();
r.ContentLength = encoding.GetByteCount(requestPayload);
r.Credentials = CredentialCache.DefaultCredentials;
r.Accept = "application/json";
r.ContentType = "application/json";
//Write the payload to the request body.
using (Stream requestStream = r.GetRequestStream())
{
requestStream.Write(encoding.GetBytes(requestPayload), 0,
encoding.GetByteCount(requestPayload));
}
try
{
HttpWebResponse response = r.GetResponse() as HttpWebResponse;
string responseBody = "";
using (Stream rspStm = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(rspStm))
{
textBoxResponse.Text = textBoxResponse.Text +
"Response Description: " +
response.StatusDescription;
textBoxResponse.Text = textBoxResponse.Text +
"Response Status Code: " + response.StatusCode;
textBoxResponse.Text =
textBoxResponse.Text + "\r\n\r\n";
responseBody = reader.ReadToEnd();
}
}
textBoxResponse.Text = "Success: " +
response.StatusCode.ToString();
}
catch (System.Net.WebException ex)
{
textBoxResponse.Text = textBoxResponse.Text +
"Exception message: " + ex.Message;
textBoxResponse.Text = textBoxResponse.Text +
"\r\nResponse Status Code: " + ex.Status;
textBoxResponse.Text = textBoxResponse.Text + "\r\n\r\n";
// get error details sent from the server
StreamReader reader =
new StreamReader(ex.Response.GetResponseStream());
textBoxResponse.Text = textBoxResponse.Text +
reader.ReadToEnd();
}
Voir aussi
Concepts
HttpWebRequest GET (ADO.NET Data Services Framework)
HttpWebRequest POST (ADO.NET Data Services Framework)
HttpWebRequest DELETE (ADO.NET Data Services Framework)
Spécifications HTTP courantes (ADO.NET Data Services Framework)
Bibliothèque cliente .NET (ADO.NET Data Services Framework)