Как реализовать If-Modified на C# ASP.NET Core MVC


Опубликовано 01.04.2019 21:48 | Автор: Admin

В данной статье рассматривается:
Создадим небольшой класс для реализации If-Modified на C# ASP.NET Core MVC

Если вы сюда попали, значит вам это нужно. Рассказывать для чего нужен заголовок If-Modified я не буду, просто приведу код чуточку переделанного класса найденного на просторах интернета. Применим именно для C# ASP.NET Core MVC.

Сам код:

   public static class CacheExtensions
    {
        public static bool IsModified(this Controller controller, DateTime updatedAt)
        {
            var headerValue = controller.Request.Headers["If-Modified-Since"];
            if (headerValue.Count>0)
            {
                var modifiedSince = DateTime.Parse(headerValue).ToLocalTime();
                if (modifiedSince >= updatedAt)
                {
                    return false;
                }
            }

            return true;
        }

        public static ActionResult NotModified(this Controller controller)
        {          
            return new StatusCodeResult(304);
        }

        public static void Modified(this Controller controller, DateTime updatedAt)
        {
            controller.Response.Headers.Add("Last-Modified", updatedAt.ToUniversalTime().ToString("R"));
        }
    }

Для корректного сравнения в if (modifiedSince >= updatedAt) надо отсечь миллисекунды.

Один из вариантов отсечения миллисекунд:

var dateTime = new DateTime(dt.Ticks - (dt.Ticks % TimeSpan.TicksPerSecond),dt.Kind);
Использование:

     if (!this.IsModified(UpdatedAt))
                return this.NotModified();
                     else this.Modified(UpdatedAt);

Метки
.Net Core C# WEB

Комментариев: 0

 40 |


Добавить комментарий:
Google
Yandex
Отправить