. NET Ненавязчивый атрибут настраиваемого диапазона дат, показывающий неверную дату, если пул приложений не был переработан - PullRequest
0 голосов
/ 22 января 2020

У нас есть приложение. NET MVC. В нем есть плагин Unobtrusive Validation и пользовательский валидатор для диапазонов дат.

Imports System.ComponentModel.DataAnnotations

Public Class DateRangeAttribute
Inherits ValidationAttribute
Implements IClientValidatable, IMetadataAware

'[redacted for brevity]

Public Sub New(minDate As String, maxDate As String, minDateRelativeDays As Integer, maxDateRelativeDays As Integer)
    MyBase.New(DefaultErrorMessage)

    If minDate = String.Empty Then
        Me.MinDate = Today
    Else
        Me.MinDate = ParseDate(minDate)
    End If

    If maxDate = String.Empty Then
        Me.MaxDate = Today
    Else
        Me.MaxDate = ParseDate(maxDate)
    End If

    Me.MinDate = Me.MinDate.AddDays(minDateRelativeDays)
    Me.MaxDate = Me.MaxDate.AddDays(maxDateRelativeDays)

End Sub

'[redacted for brevity]

Проверка используется путем добавления соответствующего украшения к свойству в модели

<Display(name:="Completed date"), DateRange("2000/01/01", Nothing, 0, 0), DisplayFormat(DataFormatString:="{0:dd/MMM/yyyy}", ApplyFormatInEditMode:=True)>

В этом случае, поскольку «Nothing» передается параметру maxDate, будет установлено значение Today. Это прекрасно работает, оно не позволит вам указать дату, более позднюю, чем «Сегодня», за исключением того, что в конце дня не будет «refre sh», если только пул приложений IIS не будет переработан. Когда пул приложений продолжает работать с одного дня на следующий, проверка диапазона дат завершается неудачей, поскольку он считает, что Today все еще вчера. Это происходит на стороне клиента и на стороне сервера. Мы не используем кеширование вывода и не делаем ничего для явного кеширования результата валидатора.

Он действует так, как будто кеширует, что такое Today, но это кажется совершенно неправильным. Мы ввели обходной путь, чтобы принудительно перезапустить пул приложений в полночь, что уменьшило проблему, но все равно не имеет смысла для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...