Я новичок в Azure / хранилище BLOB-объектов и т. Д.
Мне нужно прочитать файл из BLOB-объекта, используя остальные API.
Я хочу использовать eTag для локального кэширования, а затем только для чтения файла
если этаг изменился.
Если Etag не является правильным способом проверить, изменились ли данные, то, пожалуйста, сообщите?
То, что я заметил, что я могу читать файл, но eTag все время равен нулю.
Что я делаю не так?
private const string EtagKey = "myEtag";
private readonly string xmlFilename
= Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
"MyFile.xml");
//get etag from cache if there
public string CachedEtagVersion => Preferences.Get(EtagKey, string.Empty);
private async Task<string> GetFileFromCloud()
{
using (var httpClient = new HttpClient())
{
if (!string.IsNullOrEmpty(CachedEtagVersion))
{
httpClient.DefaultRequestHeaders.Add("If-None-Match", CachedEtagVersion);
}
var response = await httpClient.GetAsync("https://mybloburl/XmlFiles/Myfile.xml");
string xmlFileContent;
if (response.StatusCode == HttpStatusCode.NotModified)
{
xmlFileContent = ReadFromCache();
}
else
{
xmlFileContent = await response.Content.ReadAsStringAsync();
}
//response.Headers.ETag always NULL WHY??????**
UpdateLocalCache(response.Headers.ETag, xmlFileContent);
return xmlFileContent;
}
}
private void UpdateLocalCache(EntityTagHeaderValue eTag, string xmlFileContent)
{
if (eTag == null || CachedEtagVersion == eTag.Tag) return;
//cache the etag it on the device using xam essentials
Preferences.Set(EtagKey, eTag.Tag);
File.WriteAllText(xmlFilename, xmlFileContent);
}
private string ReadFromCache()
{
if (!File.Exists(xmlFilename)) return string.Empty;
return File.ReadAllText(xmlFilename);
}