2011-01-11 7 views
0

Я смотрю на код NerdDinner и в их AuthenticationController, они имеют следующий код:Asp.net MVC FormsAuthentication от службы

 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)); 

Моя проблема заключается в том, что я хочу, чтобы переместить этот код в класс который не наследуется от типа Controller. Проблема с этим - последняя строка кода, где он устанавливает cookie; Response, что характерно для Controller.

Как установить encTicket в файл cookie без доступа к контроллеру? Есть ли способ использовать класс FormsAuthentication для этого?

ответ

0

Это как добавить зашифрованный билет в браузере куки без использования контроллера.

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

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

В вашем отдельном классе может быть метод, который возвращает файл cookie, так что единственное, что должен сделать контроллер, - добавить cookie к ответу. IMO управление печеньем (добавление/удаление) является обязанностью контроллера:

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