C# 重构会话检查
我在所有控制器中都有重复代码:C# 重构会话检查,c#,asp.net-mvc-3,refactoring,C#,Asp.net Mvc 3,Refactoring,我在所有控制器中都有重复代码: var user = Session["_User"] as User; if (user== null) { return RedirectToAction("Index"); } 我如何重构这个?我应该将其添加到属性中还是制作会话包装器 最好的方法是什么?说明 有很多方法。我会创建一个自己的控制器。 而不是从中继承其他控制器 样品 描述 有很多方法。我会创建一个自己的控
var user = Session["_User"] as User;
if (user== null)
{
return RedirectToAction("Index");
}
我如何重构这个?我应该将其添加到属性中还是制作会话包装器
最好的方法是什么?说明
有很多方法。我会创建一个自己的控制器。
而不是从中继承其他控制器
样品
描述
有很多方法。我会创建一个自己的控制器。
而不是从中继承其他控制器
样品
使用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);
}
}
使用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);
}
}
如果我从这个基本控制器扩展所有其他控制器?为什么我仍然需要DI?您不需要DI,但可以使用它将所有控制器自动设置为此。当然,更简单的方法是简单地从这个类继承控制器。是的,我认为DI在这个上下文中没有任何意义。@DarthVader是的,你是对的,那太多了。我的答案更新了。非常感谢。如果我从这个基本控制器扩展所有其他控制器?为什么我仍然需要DI?您不需要DI,但可以使用它将所有控制器自动设置为此。当然,更简单的方法是简单地从这个类继承控制器。是的,我认为DI在这个上下文中没有任何意义。@DarthVader是的,你是对的,那太多了。我的答案更新了。谢谢大家!@DarthVader我已更新代码以中断无限循环。@DarthVader我已更新代码以中断无限循环。