+ var targetUri = GetTargetUri(account).Combine(container).Combine(objectName);\r
+ try\r
+ {\r
+ using (var response = await _baseHttpClient.HeadAsyncWithRetries(targetUri, 3))\r
+ {\r
+ switch (response.StatusCode)\r
+ {\r
+ case HttpStatusCode.OK:\r
+ case HttpStatusCode.NoContent:\r
+ var tags = response.Headers.GetMeta("X-Object-Meta-");\r
+ var extensions = (from header in response.Headers\r
+ where\r
+ header.Key.StartsWith("X-Object-") &&\r
+ !header.Key.StartsWith("X-Object-Meta-")\r
+ select new {Name = header.Key, Value = header.Value.FirstOrDefault()})\r
+ .ToDictionary(t => t.Name, t => t.Value);\r
+\r
+ var permissions = response.Headers.GetFirstValue("X-Object-Sharing");\r
+\r
+\r
+ var info = new ObjectInfo\r
+ {\r
+ Account = account,\r
+ Container = container,\r
+ Name = objectName,\r
+ ETag = response.Headers.ETag.Tag,\r
+ UUID = response.Headers.GetFirstValue("X-Object-UUID"),\r
+ X_Object_Hash = response.Headers.GetFirstValue("X-Object-Hash"),\r
+ Content_Type = response.Headers.GetFirstValue("Content-Type"),\r
+ Bytes = Convert.ToInt64(response.Content.Headers.ContentLength),\r
+ Tags = tags,\r
+ Last_Modified = response.Content.Headers.LastModified,\r
+ Extensions = extensions,\r
+ ContentEncoding =\r
+ response.Content.Headers.ContentEncoding.FirstOrDefault(),\r
+ ContendDisposition =\r
+ response.Content.Headers.ContentDisposition.ToString(),\r
+ Manifest = response.Headers.GetFirstValue("X-Object-Manifest"),\r
+ PublicUrl = response.Headers.GetFirstValue("X-Object-Public"),\r
+ StorageUri = StorageUrl,\r
+ };\r
+ info.SetPermissions(permissions);\r
+ return info;\r
+ case HttpStatusCode.NotFound:\r
+ return ObjectInfo.Empty;\r
+ default:\r
+ throw new WebException(\r
+ String.Format("[FAIL] GetObjectInfo for {0} failed with unexpected status code {1}",\r
+ objectName, response.StatusCode));\r
+ }\r
+ }\r
+ }\r
+ catch (RetryException)\r
+ {\r
+ Log.WarnFormat("[RETRY FAIL] GetObjectInfo for {0} failed.", objectName);\r
+ return ObjectInfo.Empty;\r
+ }\r
+ catch (WebException e)\r
+ {\r
+ Log.Error(\r
+ String.Format("[FAIL] GetObjectInfo for {0} failed with unexpected status {1}",\r
+ objectName, e.Status), e);\r
+ throw;\r
+ }\r
+ } /* using (var client = new RestClient(_baseClient))\r