У меня есть фильтр действий, проверяющий, установлена ли переменная сеанса ID
. Для целей разработки я вручную установил эту переменную до проверки.
public class MyActionFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext context)
{
context.HttpContext.Session.Add("ID", 123123);
int ID = (int)context.HttpContext.Session.Contents["ID"];
var rd = context.HttpContext.Request.RequestContext.RouteData;
TED _db = new TED();
//if not in DB
if (_db.Users.Find(ID) == null && rd.GetRequiredString("action") != "NoAccess")
{
RouteValueDictionary redirectTargetDictionary = new RouteValueDictionary();
redirectTargetDictionary.Add("action", "NoAccess");
redirectTargetDictionary.Add("controller", "Home");
redirectTargetDictionary.Add("area", "");
context.Result = new RedirectToRouteResult(redirectTargetDictionary);
}
base.OnActionExecuted(context);
}
}
Насколько я понимаю, этот код запускается до любой страницы, этот Session["ID"]
всегда установлен. Сайт работает нормально, если я постоянно тестирую, но, похоже, он сломается, если я оставлю его на некоторое время, а затем попытаюсь продолжить тестирование. Вот ошибка, которую я получаю:
int UserID = (int)Session.Contents["ID"];
System.NullReferenceException: Object reference not set to an instance of an object.
Первоначально я думал, что сеанс может просто истекать, но до любой загрузки страницы Session["ID"]
должен быть установлен. В чем проблема?