Freigeben über


Gewusst wie: Einfügen von Entitätsdaten als Ressource (WCF Data Services)

Mit einer HTTP POST-Anforderung können WCF Data Services neue Daten hinzugefügt werden.Die POST-Anforderung kann auf Entitätenmengen angewendet werden, die durch Schlüssel, Links, Navigationseigenschaften oder Dienstvorgänge angegeben werden.Weitere Informationen finden Sie unterPOST-Methode (WCF Data Services).

Einfügen einer neuen Entität mithilfe einer POST-Anforderung

Die von der POST-Anforderung einzufügenden Daten werden als Zeichenfolge formatiert und in den Hauptteil der HTTP-Anforderung eingegliedert.Die Address-Entitätenmenge im AdventureWorksModel wird von einer POST-Anforderung zunächst durch folgenden URI angegeben: "https://localhost:50781/AdvWksSalesS.svc/Address".Wenn die zu ändernde Entität zu einer Vererbungshierarchie gehört, ist das __metadata-Syntaxelement erforderlich:

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

Ein vollständiges Beispiel, in dem ein neues Datenelement für die Address-Entitätenmenge mit der JSON-Syntax dargestellt wird, finden Sie im Codeblock am Ende dieser Beschreibung.

Mit dem Code wird eine neue Address-Entität in den Datendienst eingefügt, durch den das AdventureWorksModel bereitgestellt wird.Es wird eine HttpWebRequest r erstellt, in die der URI des Entitätstyps,https://localhost:50781/AdvWksSalesS.svc/Address, als einziger Parameter des Konstruktors einzufügen ist.Die Initialisierung verschiedener Variablen, die die Eigenschaftendaten des neuen Elements bilden, erfordert die Serialisierung in JSON-Formate.Bei der DateTime-Serialisierung handelt es sich um eine komplexe Konvertierung, die besser mit einer JSON-Codebibliothek verwaltet werden sollte. Hier ist die Serialisierung jedoch enthalten.Weitere Informationen zur JSON-Serialisierung finden Sie unter JSON-Serialisierungsregeln (ADO.NET Data Services).Die der stateProvinceId zugewiesene ganze Zahl und die der rowGuid zugewiesene Guid werden bei der Initialisierung der requestPayload-Zeichenfolge serialisiert.

Der Hauptteil der Anforderung wird, wie bereits beschrieben, einer Zeichenfolge mit dem Namen requestPayload zugewiesen.Methode wird auf "POST" festgelegt.ContentType wird dem json-Protokoll zugewiesen.Mit der Zeile r.Accept = "application/json" wird der Server angewiesen, eine eventuelle Antwort mit dem json-Protokoll codiert zurückzusenden.

Wenn der Dienst durch ein übertragungsbasiertes Authentifizierungsschema, etwa der 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")
       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();
        
    }

Siehe auch

Konzepte

POST-Methode (WCF Data Services)

Gewusst wie: Aktualisieren von Entitätsdaten als Ressource (WCF Data Services)

Gewusst wie: Abrufen von Daten aus einer Ressource (WCF Data Services)

Gewusst wie: Einfügen von Entitätsdaten als Ressource (WCF Data Services)

Gewusst wie Löschen von Entitätsdaten als Ressource (WCF Data Services)

Weitere Ressourcen

Allgemeine HTTP-Anforderungen (ADO.NET Data Services)

.NET-Clientbibliothek (ADO.NET Data Services)