ASP.NET MVC:Action Filter来设置控制器变量?

Ser*_*gio 15 asp.net asp.net-mvc action-filter

我有一个场景,每个页面请求我必须检查会话中是否存在特定ID.如果找到这个,我必须从数据库中获取一个相关对象,并使其可供控制器使用.如果未找到会话ID,则需要重定向用户(会话已过期).

目前我有一个自定义的代码块(几行),它在我的控制器中的每个动作方法的开头执行此操作 - 这似乎是不必要的重复.

这种情况是否值得一个Action Filter?

谢谢

更新这里的一些很棒的信息.谢谢

dev*_*tal 10

是的,这听起来像是一个动作过滤器的良好应用,因为您可以在控制器级别应用它来操作所有操作.如果您不想手动将其添加到所有控制器,或者编写自己的控制器工厂(自动将此操作过滤器应用于每个控制器),您也可以将其作为控制器基类的一部分.

请参阅自定义操作过滤器到操作的ASP.NET MVC Pass对象,以将数据从操作过滤器传递到操作.


Pra*_*sad 9

像这样创建一个基本控制器

   public class MyContollerController : Controller
    {
        public DataEntity userData;
        protected override void Initialize(System.Web.Routing.RequestContext requestContext)
        {            
            base.Initialize(requestContext);
            var customId = requestContext.HttpContext.Session["key"];
            if(customId!=null)
            {
                 userData=getDataGromDataBase(customId);
            }   
            else
            {
               //redirect User
            }     
        }
    }
Run Code Online (Sandbox Code Playgroud)

现在创建像这样的ur控制器

public class MyDemoController : MyContollerController
{
        public ActionResult Action1()
        { 
             //access your data
             this.userData

        }
        public ActionResult Action2()
        { 
             //access your data
             this.userData

        }
}
Run Code Online (Sandbox Code Playgroud)