重构会话检查

时间:2012-04-28 18:36:04

标签: c# asp.net-mvc-3 refactoring

我在所有控制器中都有这个重复的代码:

        var user = Session["_User"] as User;

        if (user== null)
        {
            return RedirectToAction("Index");
        }

我该怎么重构呢?我应该将它添加到属性还是创建会话包装器?

最好的方法是什么?

2 个答案:

答案 0 :(得分:2)

描述

有很多方法。我会创建一个自己的控制器。 比你继承其他控制器。

示例

public class BaseController : Controller
{
    public User User { get; private set; }

    public BaseController()
    {
        this.User = Session["_User"] as User;
    }
}

public class HomeController: BaseController 
{
    // your action methods
}

答案 1 :(得分:2)

使用MasterController扩展所有控制器并覆盖OnActionExecuting方法,如下所示

public class MasterController : Controller
{
    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var user = Session["_User"] as User;

        if (user== null)
        {
            if(filterContext.ActionDescriptor.ActionName != "Index" || filterContext.ActionDescriptor.ControllerDescriptor.ControllerName != "ControllerThatContainIndexAction")
            {
                 filterContext.Result = this.RedirectToAction("Index");
                 return;
            }
        }
        base.OnActionExecuting(filterContext);
    }
}