30.06.2015

Как установить ETag из кода

Для того, чтобы вручную прикреплять к ответу сервера заголовки ETag и Last Modified, например в каком-нибудь HttpHandler, достаточно добавить лишь несколько строк кода:

context.Response.AddFileDependency(request.PhysicalPath);
context.Response.Cache.SetLastModifiedFromFileDependencies();
context.Response.Cache.SetCacheability(HttpCacheability.Public);
context.Response.Cache.SetETagFromFileDependencies();

где context — это HttpContext (или HttpContext.Current), а request — это HttpContext.Request (или HttpContext.Current.Request).

Решение было найдено здесь.

Если вдруг появится проблема с генерацией ETag, например возникнет HttpException: Unable to generate etag from dependencies. One of the dependencies couldn't generate a unique id, перед добавлением заголовков добавьте Thread.Sleep(10). Из-за чего возникает такое исключение, точно не известно. Решение было найдено здесь.