У вас есть два варианта.
1. Поместите логику в функцию Initialize
базового контроллера
Предполагая, что все ваши контроллеры наследуются от базового контроллера, вы можете поместить необходимую логику в переопределение функции Execute()
базового контроллера.
public class BaseController : Controller
{
public BaseController()
{
}
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
// check if the user has the value here using the requestContext.HttpContext object
}
{
2. Используйте функцию Global.asax void Application_PreRequestHandlerExecute(Object source, EventArgs e)
public void Application_PreRequestHandlerExecute(Object source, EventArgs e)
{
HttpApplication application = (HttpApplication)source;
HttpContext context = application.Context;
// use an if statement to make sure the request is not for a static file (js/css/html etc.)
if(context != null && context.Session != null)
{
// use context to work the session
}
}
Примечание. Вторая часть работает с любым приложением ASP.NET, WebForms или MVC.
Что касается enforcing
, что у них есть определенная переменная сеанса, она действительно очень открыта. Вы можете перенаправить на определенную страницу, чтобы они могли заполнить форму или выбрать опцию или что-то еще. Или может просто иметь значение по умолчанию, которое установлено для определенного ключа сеанса, если он не найден.
EDIT
Играя с этим, я заметил большую проблему с подходом Application_PreRequestHandlerExecute
. Обработчик события вызывается для любого запроса, отправляемого на сервер, будь то файлы .css / .js / .html. Я не уверен, является ли это проблемой с настройкой моей рабочей станции или с тем, как работает ASP.NET/IIS, поэтому я хотел бы убедиться, что это не вызывается для всех запросов при реализации подхода, описанного выше.
По предыдущим причинам я завернул работу, которая должна быть выполнена в сеансе, с оператором if
.