#.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.