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)