Опираясь на решение упомянутого потока, мы можем добавить параметры в скрипт в разделе агрегации для дальнейшей фильтрации агрегированных результатов:
curl -XGET "https://localhost:9200/testindex/_search?pretty" -H 'Content-Type: application/json' -d'
{
"aggs": {
"room_bucket": {
"terms": {
"field": "room_name.keyword"
},
"aggs": {
"hour_bucket": {
"terms": {
"script": {
"inline": """
def range = LongStream.rangeClosed(doc.start_date.value, doc.end_date.value);
return range.filter(x -> x >= params.min && x <= params.max).toArray();
""",
"lang": "painless",
"params": {
"min": 10,
"max": 11
}
},
"order": {
"_key": "asc"
},
"value_type": "long"
}
}
}
}
}
}'
Вероятно, лучше только создать класс BasePage, которому должны наследоваться все Ваши страницы. Затем можно поместить код в событии Unload страницы и не будет никакой проблемы.
Вы не можете сделать этого в Application_Start и Application_End.
Из MSDN:
Application_Start и методы Application_End являются специальными методами, которые не представляют события HttpApplication. ASP.NET называет их однажды в течение времени жизни домена приложения, не для каждого экземпляра HttpApplication.
На этом этапе жизненного цикла запроса была уже представлена страница, и объект страницы больше не доступен. Необходимо было бы использовать более раннее событие.
Тем не менее я не рекомендовал бы этот подход, поскольку существует много проблем с ним:
Вы используете FindControl. Этот код повредится, если название управления изменится.
Этот код будет выполнен для любого запроса, не только страниц и не только конкретных страниц, за которыми Вам нужно это для выполнения.
Этот код должен быть на основной странице или базовом классе страницы, где можно получить доступ к маркировке безопасным с точки зрения типов способом.