Событие Global.asax: Application_OnPostAuthenticateRequest - PullRequest
3 голосов
/ 18 июля 2009

Я использую событие Application_OnPostAuthenticateRequest в global.asax, чтобы получить

a) Роли и разрешения аутентифицированного пользователя. Также я создал свой основной класс для получения сведений о пользователе, а также ролей и разрешения.

b) Чтобы получить некоторую информацию, которая остается неизменной для этого пользователя.

void Application_OnPostAuthenticateRequest(object sender, EventArgs e)
{

    // Get a reference to the current User
    IPrincipal objIPrincipal = HttpContext.Current.User;

    // If we are dealing with an authenticated forms authentication request
    if ((objIPrincipal.Identity.IsAuthenticated) && (objIPrincipal.Identity.AuthenticationType == "Forms"))
    {
        CustomPrincipal objCustomPrincipal = new CustomPrincipal();
        objCustomPrincipal = objCustomPrincipal.GetCustomPrincipalObject(objIPrincipal.Identity.Name);
        HttpContext.Current.User = objCustomPrincipal;
        CustomIdentity ci = (CustomIdentity)objCustomPrincipal.Identity;
        HttpContext.Current.Cache["CountryID"] = FatchMasterInfo.GetCountryID(ci.CultureId);
        HttpContext.Current.Cache["WeatherLocationID"] = FatchMasterInfo.GetWeatherLocationId(ci.UserId);
        Thread.CurrentPrincipal = objCustomPrincipal;
    }
}

У меня следующий вопрос:

  1. Это событие срабатывает каждый раз для каждого запроса. Следовательно для каждого запроса код выполняется?
  2. Мой подход правильный или нет?
  3. Правильно ли добавить HttpContext.Current.Cache в это событие или нам следует переместить его в Session_Start

1 Ответ

4 голосов
/ 18 июля 2009
  1. Да, это событие срабатывает для каждого запроса
  2. Да, вы можете использовать это событие, чтобы получить информацию для аутентифицированного пользователя
  3. Нет, не используйте HttpCurrent.Current.Cache для хранения информации, специфичной для пользователя, поскольку кэш является общим для всех пользователей, и вы получите конфликты. Вместо этого используйте HttpContext.Current.Session, поскольку это будет зависеть от пользователя.
...