PostAuthenticateRequest срабатывает несколько раз - PullRequest
6 голосов
/ 07 июля 2010

У меня есть проверка подлинности с помощью форм, и мне нужно, чтобы пользовательский объект был сохранен в HttpContext.Current.User и в Thread.CurrentPrincipal.

Чтобы получить это, я слушаю событие PostAuthenticateRequest, затем считываю из БД все пользовательские данные, которые мне нужно сохранить в HttpContext.Current.User и в Thread.CurrentPrincipal, затем я создаю экземпляры пользовательских объектов IPrincipal и IIdentity и назначаю их в вышеуказанные места.

Проблема в том, что по какой-то причине PostAuthenticateRequest запускается несколько раз для одного запроса. Это вызывает ненужные обращения к БД, которые снижают производительность.

Как мне решить эту проблему? (ASP.NET MVC 2)

Спасибо.

Ответы [ 2 ]

5 голосов
/ 07 июля 2010

Вы уверены, что он запускается несколько раз для одного запроса? Помните, что каждый ресурс, например изображения и таблицы стилей, на которые есть ссылки на вашей странице, будет вызывать это событие, поскольку они рассматриваются как отдельные запросы. Рекомендуется кратковременно кэшировать пользовательские объекты и проверять их наличие в кэше, а также отправляться в БД только в том случае, если ее там нет.

Вам потребуется реализовать некоторую блокировку кеша, поскольку эти запросы обычно выполняются очень близко друг к другу.

1 голос
/ 06 августа 2010

Просто используйте тег в вашем web.config, чтобы удалить любую аутентификацию из ваших скриптов, css и каталогов изображений Например:

<system.web>
...
</system.web>

<location path="~/Scripts">
   <system.web>
      <authorization>
         <allow users="*"/>
      </authorization>
   </system.web>   
</location>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...