I am working on a application with Azure Tables using Blazor Hybrid (blazor MAUI) and am using the HttpClient to send a GetAsync() request to a table URL with a querystring filter and all is great.
I send the request, get a 200 response and happily deserialise the JSON to a List of whichever object I am requesting. The query generally returns a JSON array of items as there are generally multiple applicable to the filter.
I also have implemented post methods to create new entities which work fine too.
My question is for a put/merge/delete request concurrency is managed by the ETag of the entity which I understand is passed as a response header parameter - but my objects come from a response content JSON array and thus any response header is meaningless to each object in the returned JSON array.
therefore I can only undertake a put/merge/delete action with an if-match wildcard '*' and therefore have no concurrency management.
Do I have to return a collection of partitionkey:rowkey values from my filtered get request and then iterate through them requesting individual entities so i can get the ETags asociated with them or some such?
Based on the documentation provided here, Etag is returned in odata.etag attribute in response body when the value of Accept request header is application/json;odata=fullmetadata. Please make sure that you have done that.
Also, since you are deserializing the JSON response to a POCO object, you would need to ensure that odata.etag maps to a property in your POCO object. If your POCO object derives from TableEntity, then the deserialization should automatically populate ETag property.
You may also find this link useful as well: https://learn.microsoft.com/en-us/rest/api/storageservices/payload-format-for-table-service-operations#json-format-applicationjson-versions-2013-08-15-and-later.