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我已更新代码以中断无限循环。