我在所有控制器中都有这个重复的代码:
var user = Session["_User"] as User;
if (user== null)
{
return RedirectToAction("Index");
}
我该如何重构呢?我应该将其添加到属性中还是制作会话包装器?
最好的方法是什么?
我在所有控制器中都有这个重复的代码:
var user = Session["_User"] as User;
if (user== null)
{
return RedirectToAction("Index");
}
我该如何重构呢?我应该将其添加到属性中还是制作会话包装器?
最好的方法是什么?
有很多方法。我会创建一个自己的控制器。比你继承其他控制器。
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
}
使用 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);
}
}