TempData Как Объект в WebForms - Состояние сеанса только для 1 Дополнительного Запроса

Я хотел бы хранить некоторые объекты только для одного запроса через состояние сеанса. Я, может казаться, не думаю о простом способе выполнить это. Это точно, какой MVC's ASP.NET объект TempData делает. Кто-либо мог предоставить мне ссылку или некоторые примеры того, как иметь объект в состоянии сеанса, только переживают один дополнительный запрос?

Я думал, это могло быть возможно выполнено путем создания пользовательского объекта словаря, который хранит возраст (# запросов) на каждом объекте. Путем подписки на Application_BeginRequest и методы Application_EndRequest, Вы могли выполнить необходимую очистку объектов. Это могло даже, вероятно, упростить создание объекта, который сохранил часть данных для X запросов, не всего один. Это на правильном пути?

6
задан Simple Sandman 14 November 2014 в 14:31
поделиться

2 ответа

Я реализовал нечто очень похожее на то, что вы описали, в методе Application_AcquireRequestState в Global.ascx.cs. Все мои объекты сессии обернуты в класс, который ведет подсчет количества прочтений.

// clear any session vars that haven't been read in x requests
List<string> keysToRemove = new List<string>();
for (int i = 0; HttpContext.Current.Session != null && i < HttpContext.Current.Session.Count; i++)
{
    var sessionObject = HttpContext.Current.Session[i] as SessionHelper.SessionObject2;
    string countKey = "ReadsFor_" + HttpContext.Current.Session.Keys[i];
    if (sessionObject != null/* && sessionObject.IsFlashSession*/)
    {
        if (HttpContext.Current.Session[countKey] != null)
        {
            if ((int)HttpContext.Current.Session[countKey] == sessionObject.Reads)
            {
                keysToRemove.Add(HttpContext.Current.Session.Keys[i]);
                continue;
            }
        }
        HttpContext.Current.Session[countKey] = sessionObject.Reads;
    }
    else if (HttpContext.Current.Session[countKey] != null)
    {
        HttpContext.Current.Session.Remove(countKey);
    }
}

foreach (var sessionKey in keysToRemove)
{
    string countKey = "ReadsFor_" + sessionKey;
    HttpContext.Current.Session.Remove(sessionKey);
    HttpContext.Current.Session.Remove(countKey);
}
1
ответ дан 18 December 2019 в 05:06
поделиться

Здесь можно найти нечто очень похожее: http://maff.ailoo.net/2009/06/build-a-flashmessenger-system-in-aspnet-mvc/

-2
ответ дан 18 December 2019 в 05:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: