Quelqu'un peut-il m'aider à trouver la solution du problème suivant.ASP.NET 2.0: problème dans Httpcontext.current.session.add()
Dans le site web ASP.NET: à l'événement Application_OnPostAuthenticate(), quel que soit le code i écriture est exécutée pour chaque demande. Par conséquent, en raison de cet objet customidentity, countryid et weatherid sont appelés à chaque fois pour chaque requête (appel de la base de données pour la valeur). Il affecte le temps de réponse de la page et exécute le code inutile.
vide Application_OnPostAuthenticateRequest (expéditeur d'objet, 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; }
}
Pour résoudre ce problème lorsque je tente tochange code comme suit HttpContext.Current.Session.Add ("test", FatchMasterInfo.GetWeatherLocationId (ci.UserId);); à la place du cache j'ai trouvé l'erreur de remplissage "La réfrence d'objet n'est pas définie sur l'instance de l'objet"
Je ne sais pas si nous pouvons stocker la variable de session dans l'événement Application_OnPostAuthenticate() ou non?
@ironsam, Merci beaucoup. J'ai peu plus de questions à propos de la même 1. En utilisant GetCustomPrincipalObject() je récupère les rôles et les autorisations de l'utilisateur connecté. C'est une bonne pratique pour trouver des rôles et des permissions ici ou nous devons changer de code et le placer ailleurs. 2. Pourquoi l'événement sessionstart n'est pas le bon endroit pour session.add()? Pendant ce temps, j'applique la solution que vous avez fournie. J'espère que le problème sera résolu. –
Edit: @ironsam, j'ai essayé la solution que vous fournissez. lorsque j'obtiens un utilisateur sur la page ASPX en utilisant le code suivant CustomIdentity ci = HttpContext.Current.User.Identity comme CustomIdentity; La valeur de ci est nulle. Je ne me trompe pas? –
Vous devriez pouvoir obtenir le CustomIdentity de l'objet de session si vous avez besoin sur la page aspx: CustomPrincipal pi = (CustomPrincipal) session [objIPrincipal.Identity.Name]; CustomIdentity ci = (CustomIdentity) pi.Identity; En ce qui concerne les meilleures pratiques et lorsque certains événements se produisent dans une requête, cela peut aider. –
ironsam