Partager via


HttpWebRequest POST (ADO.NET Data Services Framework)

De nouvelles données peuvent être ajoutées à ADO.NET Data Services à l'aide d'une demande HTTP POST. La demande POST peut être appliquée à des jeux d'entités identifiés par une clé, des liens, des propriétés de navigation et des opérations de service. Pour plus d'informations, consultez Méthode POST (ADO.NET Data Services Framework).

Demande POST pour insérer une nouvelle entité

Les données qui seront insérées par la demande POST sont mises en forme en tant que chaîne qui devient partie intégrante du corps de la requête HTTP. Une demande POST identifie tout d'abord le jeu d'entités Address dans le AdventureWorksModel par l'URI : "https://localhost:50781/AdvWksSalesS.svc/Address". Si l'entité à modifier fait partie d'une hiérarchie d'héritage, l'élément de syntaxe __metadata est requis :

  "{__metadata:{Uri:'/Address/', " +
      "Type:'AdventureWorksModel.Address'}}"

Un exemple complet qui utilise la syntaxe JSON pour représenter un nouvel élément de données pour le jeu d'entités Address est illustré dans le bloc de code à la fin de cette description.

Le code insère une nouvelle entité Address au service de données qui déploie le AdventureWorksModel. Une HttpWebRequest r est créée avec l'URI du type d'entité à insérer, https://localhost:50781/AdvWksSalesS.svc/Address, comme paramètre unique de son constructeur. L'initialisation de plusieurs variables qui constituent les données des propriétés du nouvel élément nécessitent la sérialisation aux formats JSON. La sérialisation DateTime est une conversion complexe qui devrait plutôt être gérée par une bibliothèque de codes JSON , mais ici la sérialisation est incluse. Pour plus d'informations sur la sérialisation JSON, consultez Règles de sérialisation JSON (ADO.NET Data Services Framework). L'entier affecté à stateProvinceId et le Guid affecté à rowGuid sont sérialisés dans l'initialisation de la chaîne requestPayload.

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 à "POST". 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, 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")
       as HttpWebRequest;

    DateTime creationDate = DateTime.Now;
    // Convert the date to JSON format.
    long ticks = (creationDate.ToUniversalTime().Ticks - 
  (new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).Ticks) / 10000;
    Int32 stateProvinceId = 79;
    Guid rowGuid = Guid.NewGuid();

    // __metadata is only required if inheritance is used.
    string requestPayload = "{__metadata:{Uri:'/Address/', " +
        "Type:'AdventureWorksModel.Address'}, " + 
        "AddressLine1:'703 NW 170th St.', " +
        "City:'Kirkland', StateProvinceID:" + 
        stateProvinceId.ToString() + 
        ", PostalCode:'98021', rowguid:'" + 
        rowGuid.ToString() + 
        "', ModifiedDate:'\\/Date(" + ticks + ")\\/'}";

    r.Method = "POST";
    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

Méthode POST (ADO.NET Data Services Framework)
HttpWebRequest PUT (ADO.NET Data Services Framework)
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)