Как достичь здесь ограничения If-Match при обновлении?
ITableEntity
имеет свойство с именем ETag
. Для условных обновлений вам нужно будет использовать это. Если вы укажете *
для значения ETag, объект всегда будет обновляться. Если вы укажете любое значение, кроме *
, объект будет обновлен только в том случае, если значение ETag объекта на сервере совпадает с указанным вами значением.
UPDATE
Итак, я написал пример кода для проверки условного обновления:
var account = CloudStorageAccount.Parse(connectionString);
var tableClient = account.CreateCloudTableClient();
var table = tableClient.GetTableReference("Test");
var entity = new MyEntity();
entity.PartitionKey = "pk4";
entity.RowKey = "rk4";
entity.MyIgnoredProperty = "ignored - updated";
entity.MyOtherProperty = "not ignored - updated";
entity.ETag = "W/\"0x5B168C7B6E589D2\"";//This is a dummy Etag value to fail the replace operation
TableOperation replaceOperation = TableOperation.Replace(entity);
var result = table.Execute(replaceOperation);//Fails with 412 status code
Console.WriteLine(entity.ToString());
Console.ReadLine();
и отследил запрос через Fiddler. Если вы заметили, значение ETag
передается как If-Match
заголовок запроса.