Sdílet prostřednictvím


HttpWebRequest POST (ADO.NET Data Services-Framework)

Mit einer HTTP POST-Anforderung können ADO.NET 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 (ADO.NET Data Services-Framework).

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-Framework). 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. Die Methode wird auf "POST" festgelegt. Der ContentType ist 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. Mit dem Code r.GetResponse werden die Daten gesendet und eine Antwort abgerufen. In einem weiteren Datenstromobjekt, 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 (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)
Allgemeine HTTP-Anforderungen (ADO.NET Data Services-Framework)
.NET-Clientbibliothek (ADO.NET Data Services-Framework)