2011-01-11 50 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

這是如何將加密票證添加到瀏覽器cookie不使用的控制器。

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 cookie管理(添加/刪除)是控制器的責任:

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