2011-01-11 5 views
0

ich am nerddinner Code bin auf der Suche und in ihren AuthenticationController, haben sie den folgenden Code:Asp.net Mvc FormsAuthentication von einem Dienst

 if (String.IsNullOrEmpty(alias)) throw new ArgumentException("Value cannot be null or empty.", "alias"); 

     FormsAuthenticationTicket authTicket = new 
      FormsAuthenticationTicket(1, //version 
      userdId.ToString(), // user name 
      DateTime.Now,    //creation 
      DateTime.Now.AddMinutes(30), //Expiration 
      createPersistentCookie, //Persistent 
      alias); //since Classic logins don't have a "Friendly Name" 

     string encTicket = FormsAuthentication.Encrypt(authTicket); 
     this.Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket)); 

Mein Problem ist, dass ich diesen Code in eine Klasse verschieben möchten Das erbt nicht vom Typ Controller. Das Problem dabei ist die letzte Codezeile, in der der Cookie gesetzt wird. Response, die spezifisch für Controller ist.

Wie stelle ich encTicket auf einen Cookie ein, ohne Zugriff auf den Controller zu haben? Gibt es eine Möglichkeit, die Klasse FormsAuthentication selbst zu benutzen?

Antwort

0

Dies ist, wie das verschlüsselte Ticket für das Browser-Cookie hinzuzufügen, ohne einen Controller.

var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket) 
        { 
         Expires = authTicket.Expiration, 
         Path = FormsAuthentication.FormsCookiePath 
        }; 

    if (HttpContext.Current != null) 
    { 
     HttpContext.Current.Response.Cookies.Add(cookie); 
    } 
0

Sie könnten eine Methode in Ihrer separaten Klasse haben, die den Cookie zurückgibt, sodass der Controller lediglich das Cookie zur Antwort hinzufügen muss. IMO Cookie-Management (Hinzufügen/Löschen) liegt in der Verantwortung des Controllers:

var cookie = authService.CreateAuthCookie(userId, alias); 
Response.AppendCookie(cookie); 
Verwandte Themen