我正在查看nerddinner代码,在他们的AuthenticationController
中,他们有以下代码:
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 :(得分:0)
您可以在单独的类中使用一个返回cookie的方法,以便控制器唯一要做的就是将cookie添加到响应中。 IMO cookie管理(添加/删除)是控制器的责任:
var cookie = authService.CreateAuthCookie(userId, alias);
Response.AppendCookie(cookie);
答案 1 :(得分: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);
}