1

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

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

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

我该如何重构呢?我应该将其添加到属性中还是制作会话包装器?

最好的方法是什么?

4

2 回答 2

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
}
于 2012-04-28T18:49:58.527 回答
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);
    }
}
于 2012-04-28T18:50:58.923 回答