我在所有控制器中都有这个重复的代码:
var user = Session["_User"] as User;
if (user== null)
{
return RedirectToAction("Index");
}
我该怎么重构呢?我应该将它添加到属性还是创建会话包装器?
最好的方法是什么?
答案 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);
}
}