PUT-Methode (ADO.NET Data Services-Framework)
Die Protokolle für die Verwendung der PUT-Methode von ADO.NET Data Services werden in den folgenden Listen und Beispielen beschrieben. Andere von Hypertext Transfer Protocol, RFC 2616 erforderte Verhalten werden in Allgemeine HTTP-Anforderungen (ADO.NET Data Services-Framework) und PUT, POST und DELETE (ADO.NET Data Services-Framework) beschrieben.
Die folgenden Protokolle gelten für HTTP-Anforderungen, die die PUT-Methode verwenden.
Alle erfolgreichen PUT-Anforderungen geben einen 204 No Content-Antwortcode zurück.
Bei einer PUT-Anforderung an eine ADO.NET Data Services-Ressource wird der Inhalt der Anforderung mit dem aktuellen Zustand der Ressource zusammengeführt. Die Zusammenführung erfolgt durch das Vergleichen aller Komponenten des Anforderungstexts mit der auf dem Server vorliegenden Ressource.
Wenn der Anforderungstext eine Komponente enthält, die nicht in der Ressource vorhanden ist, stellt die Anforderung eine Schemaverletzung dar, und ein 422 UnProcessable Entity-Antwortcode wird zurückgegeben.
Wenn eine Komponente im Anforderungstext mit einer Komponente der Ressource übereinstimmt, wird der Abgleichungsprozess mit den untergeordneten Elementen des Elements im Anforderungstext fortgesetzt.
Eine PUT-Anforderung, den Wert einer Ressource auf NULL festzulegen, führt zu einem 422 UnProcessable Entity-Antwortcode, wenn der Ressourcentyp keine NULL-Werte zulässt.
Eine PUT-Anforderung, den Wert einer Ressource als leer festzulegen, führt zu einem 422 UnProcessable Entity-Antwortcode, wenn im Ressourcentyp kein leerer Zustand definiert ist.
Da PUT idempotent sein muss, kann PUT nicht verwendet werden, um Ressourcen in einen Ressourcensatz einzufügen. Anders ausgedrückt kann PUT keinen POST-ähnlichen Anhang implementieren oder Semantik erstellen.
Alle verzögerten Inhaltsanmerkungen in der Anforderungsnutzlast werden ignoriert.
Wenn der Anforderungs-URI im HTTP-Header nicht mit dem zugeordneten URI in der Anforderungsnutzlast übereinstimmt, hat der Anforderungs-URI Vorrang. Die Nutzlast wird behandelt, als würde sie den Wert des Anforderungs-URI enthalten.
Wenn der Text der PUT-Anforderung die Schlüssel für die Ressourcen enthält, die als Teil der Serialisierung einer Ressource bearbeitet wurden, werden diese Schlüsselwerte ignoriert. Ressourcenschlüsselwerte können nicht aktualisiert werden.
Typen, die die PUT-Methode unterstützen
In den weiter unten in diesem Dokument aufgeführten Beispielen werden die Ressourcentypen zusammengefasst, die die PUT-Methode unterstützen. Eine PUT-Anforderung an einen Ressourcentyp, der die PUT-Methode unterstützt, kann fehlschlagen, wenn das Anforderungsprinzip nicht über ausreichende Rechte für die angegebene Ressource verfügt. In diesem Fall, der in Hypertext Transfer Protocol, RFC 2616 beschrieben wird, gibt die Anforderung einen 401 Unauthorized-Antwortcode oder einen 403 Forbidden-Antwortcode zurück, je nachdem, ob die Anforderung durch die Bereitstellung eines anderen Prinzips Erfolg haben könnte oder nicht.
Die folgenden Beispiele zeigen die Endelemente der Syntax des HTTP-URL-Pfads, die die PUT-Methode unterstützen bzw. nicht unterstützen. Jeder Fall enthält eine Beschreibung einer PUT-Anforderung und die vorhersehbaren Ergebnisse.
/<EntitySet>
Beispiel-URI: Endelement
Im folgenden URI-Beispiel wird eine Entitätenmenge dargestellt, die als Endelement festgelegt ist.
/Customers
Beschreibung:
Die PUT-Methode wird nicht für Entitäten unterstützt, die als Endelemente festgelegt sind. Ein 405 Method Not Supported-Antwortcode wird zurückgegeben.
/<EntitySet>(keyPredicate)
Im folgenden URI-Beispiel wird ein keyPredicate als Endelement dargestellt.
/Customers('ALFKI')
Beschreibung:
Unterstützt die PUT-Methode.
Aktualisiert die einzelne Ressourcentypeninstanz, die vom Anforderungstext bereitgestellt und durch das keyPredicate identifiziert wird.
Tiefe Aktualisierungen für zugeordnete Typen werden nicht unterstützt.
Unterstützt die Bindung der Seite einer Beziehung, die eine Kardinalität von eins hat.
Ermöglicht die Bindung der durch das keyPredicate identifizierten Ressource R1 an bestehende Ressourcen:
Wenn die R1 nur den URI einer bestehenden Ressource R2 als Wert einer Navigation oder Verknüpfung enthält, die die Seite einer Beziehung mit einer Kardinalität von eins identifiziert, ist R1 an R2 gebunden.
Wenn R1 den URI und Ressourcentext enthält, wird angenommen, dass der URI eine vorhandene Ressource R2 repräsentiert, die bereits an R1 gebunden ist. R2 wird dann mit den im Text angegebenen Werten aktualisiert.
Wenn R1 nur den Text, jedoch nicht den URI einer verwandten Ressource R2 als Wert einer Navigations- oder Verknüpfungseigenschaft enthält, wird ein 400 Bad Request zurückgegeben.
Das Senden einer Nutzlast mit dem Literalwert von NULL an diese Ressource führt zu einem 400 Bad Request-Antwortcode.
Der Wert der Eigenschaft oder Eigenschaften, die den Schlüssel der Ressourcen bilden, kann nicht aktualisiert werden. Wenn in der Nutzlast einer PUT-Anforderung neue Werte vorhanden sind, werden diese ignoriert.
Das folgende URI-Beispiel zeigt ein numerisches Schlüsselprädikat als Endelement. Der Code aktualisiert Produkt Nr. 123 und die Kategorie, der es zugewiesen ist. Die zugewiesene Kategorie wird erneut gebunden.
/Products(123)
JSON-Format
{
__metadata:{ uri="/Products(123)",
type="NorthwindModel.Product" },
Name:"New product name"
Category : { __metadata: {uri:"/Category(2)" } }
}
/<NavigationProperty> oder /<LinkProperty>
Die folgenden URI-Beispiele zeigen Navigationseigenschaften und Verknüpfungseigenschaften als Endelemente.
/Customers('ALFKI')/Orders
/Customers('ALKFI')/Orders(1)
/Products(1)/Category
(Dies funktioniert nur für Beziehungsenden mit einer Kardinalität von eins.)
Beschreibung:
Unterstützt die PUT-Methode.
Wenn durch die Navigations- oder Verknüpfungseigenschaft eine einzelne Ressource oder das Ende einer Beziehung identifiziert wird, das eine Kardinalität von eins hat:
- Verwenden Sie die gleiche Semantik wie
/<ResourceSet>(keyPredicate)
, mit der Ausnahme, dass durch einen Anforderungstext, der nur den NULL-Wert enthält, die Bindungen der Ressource an die vom zweiten bis letzten URI-Segment identifizierte Ressource aufgehoben werden.
- Verwenden Sie die gleiche Semantik wie
Wenn die Navigations- oder Verknüpfungseigenschaft mehrere Ressourcen oder das n-Ende einer Beziehung identifiziert:
- Nicht unterstützt, ein 405 Method Not Supported-Antwortcode wird zurückgegeben.
/<ComplexType>
Im folgenden URI-Beispiel wird ein komplexer Typ als Endelement gezeigt.
/Customers('ALFKI')/Address
Beschreibung:
Unterstützt die PUT-Methode.
Aktualisiert den komplexen Typ, der durch das Blatt des Anforderungs-URI identifiziert wird, mit dem Inhalt des Anforderungstexts.
Tiefe Aktualisierungen werden unterstützt.
Die Anforderungsnutzlast kann aktualisierbare Inhalte von geschachtelten komplexen Typen enthalten. Für solche Aktualisierungen ist keine maximale Tiefe definiert, solange die Tiefe innerhalb der enthaltenen Ressourcentypeninstanz liegt.
/<Property>
Das folgende URI-Beispiel zeigt eine Eigenschaft als Endelement.
/Customers('ALFKI')/FirstName
Beschreibung:
Unterstützt die PUT-Methode.
Unterstützt die Aktualisierung des Eigenschaftswerts.
Die Eigenschaft kann auf NULL festgelegt werden.
- JSON verwendet den primitiven NULL-Typ.
/<Property>/$value
Das folgende URI-Beispiel zeigt einen Eigenschaftswert als Endelement.
/Customers('ALFKI')/FirstName/$value
Beschreibung:
Unterstützt die PUT-Methode.
Unterstützt die Aktualisierung des Rohwerts der Eigenschaft.
Bietet keine Möglichkeit, den Wert auf NULL festzulegen.
Der MIME-Typ des Anforderungstexts muss mit dem des Ressourcentyps auf dem Server übereinstimmen.
Ein Anforderungstext mit 0 Bytes legt einen leeren Wert für die Eigenschaft fest, wenn der Eigenschaftstyp einen leeren Zustand definiert. Andernfalls wird ein 422 UnProcessable Entity-Antwortcode zurückgegeben.
/<ServiceOperationName>
Im folgenden URI-Beispiel wird der Name eines Dienstvorgangs als Endelement dargestellt:
/CustomersByCity?city='London'
Beschreibung:
Unterstützt nicht die PUT-Methode.
Das PUT-Verb ist für ADO.NET Data Services-Vorgänge nicht definiert.
Gibt einen 405 Method Not Supported-Antwortcode zurück.
Round-Trip-Begrenzung bei PUT-Anforderungen
Im ADO.NET Data Services-Framework wird ein Round-Trip-Szenario unterstützt, in dem eine GET-Anforderung an einen bestimmten URI für die Rückgabe einer Nutzlast verwendet wird. Ein typisches Szenario wäre die Änderung einiger der Daten und die Weitergabe der gleichen Nutzlast in eine PUT-Anforderung an diesen URI. Dies funktioniert nicht, wenn eine Eigenschaft in einer Entität keine Schlüssel- sondern eine Identitätsspalte ist. Die einzige Problemumgehung besteht darin, die Identitätsspalte in der SSDL-Datei (Store Schema Definition Language, Datenspeicherschema-Definitionssprache) in eine berechnete Eigenschaft zu ändern.
Siehe auch
Konzepte
HttpWebRequest-GET (ADO.NET Data Services-Framework)
HttpWebRequest PUT (ADO.NET Data Services-Framework)
HttpWebRequest POST (ADO.NET Data Services-Framework)
HttpWebRequest DELETE (ADO.NET Data Services-Framework)
PUT, POST und DELETE (ADO.NET Data Services-Framework)