diff --git a/sdk/digitaltwins/Azure.DigitalTwins.Core/api/Azure.DigitalTwins.Core.netstandard2.0.cs b/sdk/digitaltwins/Azure.DigitalTwins.Core/api/Azure.DigitalTwins.Core.netstandard2.0.cs index aca5edc0e7df..9776901fd060 100644 --- a/sdk/digitaltwins/Azure.DigitalTwins.Core/api/Azure.DigitalTwins.Core.netstandard2.0.cs +++ b/sdk/digitaltwins/Azure.DigitalTwins.Core/api/Azure.DigitalTwins.Core.netstandard2.0.cs @@ -70,7 +70,7 @@ public static partial class QueryChargeHelper public partial class RequestOptions { public RequestOptions() { } - public string IfMatchEtag { get { throw null; } set { } } + public string IfMatch { get { throw null; } set { } } } } namespace Azure.DigitalTwins.Core.Models diff --git a/sdk/digitaltwins/Azure.DigitalTwins.Core/src/DigitalTwinsClient.cs b/sdk/digitaltwins/Azure.DigitalTwins.Core/src/DigitalTwinsClient.cs index a63320a35a43..5d33dfb1b2f9 100644 --- a/sdk/digitaltwins/Azure.DigitalTwins.Core/src/DigitalTwinsClient.cs +++ b/sdk/digitaltwins/Azure.DigitalTwins.Core/src/DigitalTwinsClient.cs @@ -257,7 +257,7 @@ public virtual Response CreateDigitalTwin(string digitalTwinId, string d /// public virtual Task DeleteDigitalTwinAsync(string digitalTwinId, RequestOptions requestOptions = default, CancellationToken cancellationToken = default) { - return _dtRestClient.DeleteAsync(digitalTwinId, requestOptions?.IfMatchEtag, cancellationToken); + return _dtRestClient.DeleteAsync(digitalTwinId, requestOptions?.IfMatch, cancellationToken); } /// @@ -283,7 +283,7 @@ public virtual Task DeleteDigitalTwinAsync(string digitalTwinId, Reque /// public virtual Response DeleteDigitalTwin(string digitalTwinId, RequestOptions requestOptions = default, CancellationToken cancellationToken = default) { - return _dtRestClient.Delete(digitalTwinId, requestOptions?.IfMatchEtag, cancellationToken); + return _dtRestClient.Delete(digitalTwinId, requestOptions?.IfMatch, cancellationToken); } /// @@ -305,7 +305,7 @@ public virtual Response DeleteDigitalTwin(string digitalTwinId, RequestOptions r /// public virtual Task> UpdateDigitalTwinAsync(string digitalTwinId, string digitalTwinUpdateOperations, RequestOptions requestOptions = default, CancellationToken cancellationToken = default) { - return _dtRestClient.UpdateAsync(digitalTwinId, digitalTwinUpdateOperations, requestOptions?.IfMatchEtag, cancellationToken); + return _dtRestClient.UpdateAsync(digitalTwinId, digitalTwinUpdateOperations, requestOptions?.IfMatch, cancellationToken); } /// @@ -330,7 +330,7 @@ public virtual Task> UpdateDigitalTwinAsync(string digitalTwinI /// public virtual Response UpdateDigitalTwin(string digitalTwinId, string digitalTwinUpdateOperations, RequestOptions requestOptions = default, CancellationToken cancellationToken = default) { - return _dtRestClient.Update(digitalTwinId, digitalTwinUpdateOperations, requestOptions?.IfMatchEtag, cancellationToken); + return _dtRestClient.Update(digitalTwinId, digitalTwinUpdateOperations, requestOptions?.IfMatch, cancellationToken); } /// @@ -418,7 +418,7 @@ public virtual Response GetComponent(string digitalTwinId, string compon public virtual Task> UpdateComponentAsync(string digitalTwinId, string componentPath, string componentUpdateOperations, RequestOptions requestOptions = default, CancellationToken cancellationToken = default) { // TODO how can we make this patch easier to construct? - return _dtRestClient.UpdateComponentAsync(digitalTwinId, componentPath, componentUpdateOperations, requestOptions?.IfMatchEtag, cancellationToken); + return _dtRestClient.UpdateComponentAsync(digitalTwinId, componentPath, componentUpdateOperations, requestOptions?.IfMatch, cancellationToken); } /// @@ -444,7 +444,7 @@ public virtual Task> UpdateComponentAsync(string digitalTwinId, /// public virtual Response UpdateComponent(string digitalTwinId, string componentPath, string componentUpdateOperations, RequestOptions requestOptions = default, CancellationToken cancellationToken = default) { - return _dtRestClient.UpdateComponent(digitalTwinId, componentPath, componentUpdateOperations, requestOptions?.IfMatchEtag, cancellationToken); + return _dtRestClient.UpdateComponent(digitalTwinId, componentPath, componentUpdateOperations, requestOptions?.IfMatch, cancellationToken); } /// @@ -747,7 +747,7 @@ public virtual Response GetRelationship(string digitalTwinId, string rel /// public virtual Task DeleteRelationshipAsync(string digitalTwinId, string relationshipId, RequestOptions requestOptions = default, CancellationToken cancellationToken = default) { - return _dtRestClient.DeleteRelationshipAsync(digitalTwinId, relationshipId, requestOptions?.IfMatchEtag, cancellationToken); + return _dtRestClient.DeleteRelationshipAsync(digitalTwinId, relationshipId, requestOptions?.IfMatch, cancellationToken); } /// @@ -772,7 +772,7 @@ public virtual Task DeleteRelationshipAsync(string digitalTwinId, stri /// public virtual Response DeleteRelationship(string digitalTwinId, string relationshipId, RequestOptions requestOptions = default, CancellationToken cancellationToken = default) { - return _dtRestClient.DeleteRelationship(digitalTwinId, relationshipId, requestOptions?.IfMatchEtag, cancellationToken); + return _dtRestClient.DeleteRelationship(digitalTwinId, relationshipId, requestOptions?.IfMatch, cancellationToken); } /// @@ -877,7 +877,7 @@ public virtual Response CreateRelationship(string digitalTwinId, string public virtual Task UpdateRelationshipAsync(string digitalTwinId, string relationshipId, string relationshipUpdateOperations, RequestOptions requestOptions = default, CancellationToken cancellationToken = default) { // TODO how can we make this patch easier to construct? - return _dtRestClient.UpdateRelationshipAsync(digitalTwinId, relationshipId, relationshipUpdateOperations, requestOptions?.IfMatchEtag, cancellationToken); + return _dtRestClient.UpdateRelationshipAsync(digitalTwinId, relationshipId, relationshipUpdateOperations, requestOptions?.IfMatch, cancellationToken); } /// @@ -903,7 +903,7 @@ public virtual Task UpdateRelationshipAsync(string digitalTwinId, stri /// public virtual Response UpdateRelationship(string digitalTwinId, string relationshipId, string relationshipUpdateOperations, RequestOptions requestOptions = default, CancellationToken cancellationToken = default) { - return _dtRestClient.UpdateRelationship(digitalTwinId, relationshipId, relationshipUpdateOperations, requestOptions?.IfMatchEtag, cancellationToken); + return _dtRestClient.UpdateRelationship(digitalTwinId, relationshipId, relationshipUpdateOperations, requestOptions?.IfMatch, cancellationToken); } /// diff --git a/sdk/digitaltwins/Azure.DigitalTwins.Core/src/RequestOptions.cs b/sdk/digitaltwins/Azure.DigitalTwins.Core/src/RequestOptions.cs index b9243a1bb427..889de9282a72 100644 --- a/sdk/digitaltwins/Azure.DigitalTwins.Core/src/RequestOptions.cs +++ b/sdk/digitaltwins/Azure.DigitalTwins.Core/src/RequestOptions.cs @@ -1,10 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -using System; -using System.Collections.Generic; -using System.Text; - namespace Azure.DigitalTwins.Core { /// @@ -13,13 +9,18 @@ namespace Azure.DigitalTwins.Core public class RequestOptions { /// - /// A string representing a weak ETag for the entity that this request performs an operation against, as per RFC7232. The request's operation is performed - /// only if this ETag matches the value maintained by the server, indicating that the entity has not been modified since it was last retrieved. - /// To force the operation to execute only if the entity exists, set the ETag to the wildcard character '*'. To force the operation to execute unconditionally, leave this value null. + /// A string representing a weak ETag for the entity that this request performs an operation against, as per RFC7232. /// /// - /// If this value is not set, it defaults to null, and the ifMatch header will not be sent with the request. This means that update and delete will be unconditional and the operation will execute regardless of the existence of the resource. + /// + /// The request's operation is performed only if this ETag matches the value maintained by the server, + /// indicating that the entity has not been modified since it was last retrieved. + /// To force the operation to execute only if the entity exists, set the ETag to the wildcard character '*'. + /// To force the operation to execute unconditionally, leave this value null. + /// If this value is not set, it defaults to null, and the ifMatch header will not be sent with the request. + /// This means that update and delete will be unconditional and the operation will execute regardless of the existence of the resource. + /// /// - public string IfMatchEtag { get; set; } = null; + public string IfMatch { get; set; } } } diff --git a/sdk/digitaltwins/Azure.DigitalTwins.Core/tests/DigitalTwinTests.cs b/sdk/digitaltwins/Azure.DigitalTwins.Core/tests/DigitalTwinTests.cs index c72e99f1a357..aa86e67f0acb 100644 --- a/sdk/digitaltwins/Azure.DigitalTwins.Core/tests/DigitalTwinTests.cs +++ b/sdk/digitaltwins/Azure.DigitalTwins.Core/tests/DigitalTwinTests.cs @@ -5,7 +5,6 @@ using System.Collections.Generic; using System.Net; using System.Threading.Tasks; -using Azure.Core.TestFramework; using FluentAssertions; using NUnit.Framework; @@ -49,6 +48,7 @@ public async Task DigitalTwins_Lifecycle() // update twin string updateTwin = TestAssetsHelper.GetRoomTwinUpdatePayload(); + await client.UpdateDigitalTwinAsync(roomTwinId, updateTwin).ConfigureAwait(false); // delete a twin @@ -59,6 +59,7 @@ public async Task DigitalTwins_Lifecycle() { await client.GetDigitalTwinAsync(roomTwinId).ConfigureAwait(false); }; + act.Should().Throw() .And.Status.Should().Be((int)HttpStatusCode.NotFound); }