来自服务的Asp.net mvc FormsAuthentication

时间:2011-01-11 17:29:01

标签: asp.net-mvc asp.net-mvc-3

我正在查看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类本身来解决这个问题?

2 个答案:

答案 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);
    }