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)