HttpWebRequest PUT (framework di ADO.NET Data Services)

È possibile modificare i dati distribuiti da ADO.NET Data Services utilizzando una richiesta PUT HTTP. Questo metodo consente di modificare la maggior parte dei valori delle proprietà delle istanze dei dati, ma non la proprietà della chiave di un'istanza di dati. È possibile applicare la richiesta PUT a tipi di entità, collegamenti, proprietà di navigazione e tipi complessi. Per ulteriori informazioni, vedere Metodo PUT (framework di ADO.NET Data Services).

Richiesta PUT per l'aggiornamento di una singola proprietà

I dati che saranno modificati dalla richiesta PUT vengono formattati come stringa che entra a far parte del corpo della richiesta HTTP. Una richiesta PUT innanzitutto identifica l'entità Address impostata in AdventureWorksModel con ID=2 tramite l'URI: "https://localhost:50781/AdvWksSalesS.svc/Address(2)". Le modifiche alla proprietà AddressLine1 dell'entità Address vengono specificate dalla sintassi, "{AddressLine1:'1600 1st St.'}". Se l'entità da modificare fa parte di una gerarchia di ereditarietà, è richiesto l'elemento di sintassi __metadata:

  "{__metadata:{Uri:'/Address(2)/', " +
      "Type:'AdventureWorksModel.Address'}, " +
      "AddressLine1:'500 5th St.'}"

Nel blocco di codice alla fine di questa descrizione viene visualizzato un esempio completo che utilizza la sintassi JSON per rappresentare l'aggiornamento dei dati per la proprietà AddressLine1.

Il codice aggiorna la proprietà AddressLine1 dell'entità Address di AdventureWorksModel. Come unico parametro del costruttore viene creata una richiesta HttpWebRequest r con l'URI dell'entità da modificare: https://localhost:50781/AdvWksSalesS.svc/Address(2). Come descritto in precedenza, il corpo della richiesta viene assegnato a una stringa denominata requestPayload. Il metodo viene impostato su "PUT". ContentType viene assegnato al protocollo json. La riga r.Accept = "application/json" indica al server di restituire l'eventuale risposta codificata utilizzando il protocollo json.

Se il servizio viene protetto con uno schema di autenticazione basato sul trasporto, quale l'autenticazione di base HTTP, le credenziali possono essere passate come credenziali assegnate alla richiesta. Per questo esempio, vengono utilizzate le credenziali DefaultCredentials.

La richiesta r viene formattata come testo Unicode. Per ottenere la lunghezza della richiesta in byte e scrivere dati digitali nell'oggetto Stream della richiesta viene utilizzata una variabile UTF8Encoding. L'oggetto HttpWebResponse viene assegnato chiamando GetResponse sulla richiesta. Il codice r.GetResponse invia i dati e ottiene la risposta. Per contenere i dati restituiti da GetResponseStream viene utilizzato un altro oggetto Stream, rspStm.

    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();
        
    }

Vedere anche

Concetti

HttpWebRequest GET (framework di ADO.NET Data Services)
HttpWebRequest POST (framework di ADO.NET Data Services)
HttpWebRequest DELETE (framework di ADO.NET Data Services)
Requisiti HTTP comuni (framework di ADO.NET Data Services)
.Libreria client NET (framework di ADO.NET Data Services)

Altre risorse

Entity Data Model