Freigeben über


HttpWebRequest PUT (ADO.NET Data Services-Framework)

Von ADO.NET Data Services bereitgestellte Daten können mithilfe einer HTTP PUT-Anforderung geändert werden. Die meisten Werte der Eigenschaften von Dateninstanzen können mit dieser Methode geändert werden, mit Ausnahme der Schlüsseleigenschaft der Dateninstanzen. Die PUT-Anforderung kann auf Entitätstypen, Links, Navigationseigenschaften und komplexe Typen angewendet werden. Weitere Informationen finden Sie unter PUT-Methode (ADO.NET Data Services-Framework).

PUT-Anforderung zum Aktualisieren einer einzelnen Eigenschaft

Die von der PUT-Anforderung geänderten Daten werden als Zeichenfolge formatiert und in den Hauptteil der HTTP-Anforderung eingegliedert. Eine PUT-Anforderung identifiziert zunächst die Address-Entität im AdventureWorksModel mit ID=2 durch die URI: "https://localhost:50781/AdvWksSalesS.svc/Address(2)". Änderungen an der AddressLine1-Eigenschaft der Address-Entität werden durch die Syntax "{AddressLine1:'1600 1st St.'}" angegeben. Wenn die zu ändernde Entität zu einer Vererbungshierarchie gehört, ist das __metadata-Syntaxelement erforderlich:

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

Ein vollständiges Beispiel, in dem die JSON-Syntax verwendet wird, um Aktualisierungsdaten für die AddressLine1-Eigenschaft darzustellen, finden Sie im Codeblock am Ende dieser Beschreibung.

Der Code aktualisiert die AddressLine1-Eigenschaft der Address-Entität des AdventureWorksModel. Als der einzige Parameter ihres Konstruktors wird eine HttpWebRequest r mit der URI der zu ändernden Entität erstellt: https://localhost:50781/AdvWksSalesS.svc/Address(2). Der Hauptteil der Anforderung wird, wie bereits beschrieben, einer Zeichenfolge namens requestPayload zugewiesen. Die Methode ist auf "PUT" festgelegt. Der ContentType ist einem json-Protokoll zugewiesen. Mit der r.Accept = "application/json"-Zeile wird der Server angewiesen, eine eventuelle Antwort mit dem json-Protokoll codiert zurückzusenden.

Wenn der Dienst durch ein übertragungsbasiertes Authentifizierungsschema (z. B. die HTTP-Standardauthentifizierung) geschützt ist, können Anmeldeinformationen übergeben werden, indem sie der Anforderung zugewiesen werden. In diesem Beispiel werden DefaultCredentials verwendet.

Die Anforderung r ist als Unicode-Text formatiert. Eine UTF8Encoding-Variable wird verwendet, um die Länge der Anforderung in Bytes abzurufen und digitale Daten in das Stream-Anforderungsobjekt zu schreiben. Das HttpWebResponse-Objekt wird durch Aufrufen von GetResponse für die Anforderung zugewiesen. Die Daten werden vom r.GetResponse-Code gesendet, und eine Antwort wird erhalten. In einem anderen Stream-Objekt, rspStm, werden die von GetResponseStream zurückgegebenen Daten gespeichert.

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

Siehe auch

Konzepte

HttpWebRequest-GET (ADO.NET Data Services-Framework)
HttpWebRequest POST (ADO.NET Data Services-Framework)
HttpWebRequest DELETE (ADO.NET Data Services-Framework)
Allgemeine HTTP-Anforderungen (ADO.NET Data Services-Framework)
.NET-Clientbibliothek (ADO.NET Data Services-Framework)

Weitere Ressourcen

Entity Data Model