Запрос предварительной обработки ASP .net MVC перед созданием контроллера

#.net #asp.net-mvc

#.net #asp.net-mvc

Вопрос:

Я знаю, что контроллеры должны обрабатывать каждое действие, но как мне выполнить предварительную обработку некоторых запросов в asp .net mvc? Например, есть много вещей, которые требуются во всех моих контроллерах. Кодирование этого в каждом контроллере не совсем правильное, поэтому мне нужно сохранить некоторые данные в сеансе контекста http, чтобы я мог получить к ним доступ в каждом контроллере.

И если я сохраню объекты в сеансе, мне также нужно как-то правильно утилизировать или сделать доступными для последующего использования некоторые объекты в сеансе httpcontext? В моем случае я использую nhibernate для сопоставления моих объектов с базой данных, и я думал о создании пула, в котором будут храниться мои экземпляры ISession, сеансы или соединения с моей базой данных, и сделаю их доступными по мере необходимости. Я не знаю, нормально ли это, но это лучшая идея, которая мне пришла в голову, вместо того, чтобы каждый раз создавать эти ISession.

Я довольно новичок в этом, поэтому, вероятно, использую многие из этих вещей не так хорошо.

Ответ №1:

Переопределите MvcHandler класс и реализуйте там свою логику. Затем переопределите, MvcRouteHandler чтобы предоставить свою пользовательскую IHttpHandler реализацию вместо стандартной MvcHandler . Это будет проще сделать, если вы посмотрите на исходный код этих классов и точно поймете, что происходит между ними ASP.NET получение запроса и выполнение контроллера.

Другой вариант заключается в создании BaseController , который обрабатывает всю предварительную обработку, и выводит любые контроллеры в решении из базового контроллера. Это сработало бы, но это не кажется подходящим для того, что вы пытаетесь сделать в качестве первого решения, которое я предложил.

Комментарии:

1. Спасибо, у меня получилось все работать просто отлично. Я также изменил свой подход и создал пул сеансов, который управляет ISessions в БД, потому что было неправильно просто хранить в httpcontext.session.