跨所有控制器实现ActionResult

时间:2013-07-17 04:22:02

标签: asp.net-mvc

我是MVC的新手并试图了解控制器。请问您对以下情况有何评论?:

我们的应用程序的业务要求是用户在使用应用程序时必须接受“隐私政策”屏幕。我通过在用户单击初始Home Controller索引视图中的链接时设置cookie来执行此操作。

但是,我需要确保我们的应用程序中的任何入口点(即不仅来自索引页面,而是应用程序中的任何位置)检查cookie的存在。我觉得这个值可以由每个控制器检查,但我不想在每个控制器上复制相同的“如果cookie存在做某事”代码。那么我可以写下我的方法吗?

希望这是有道理的!

2 个答案:

答案 0 :(得分:1)

使用Custom ActionFilterAttribute。

创建一个CheckCookie类:

public class CheckCookie : ActionFilterAttribute
    {

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if (!CookieExists)// Check the Cookie exists
            {
                //Redirect if the cookie does not exists
                filterContext.Result = new RedirectResult("~/Redirect/NoCookie");
                return;
            }
        }
    }

<强>控制器:

[CheckCookie]//Check the Cookie exists
public ActionResult Index()
{
   return View();
}

答案 1 :(得分:0)

编写一个自定义基本控制器(它本身继承了标准的ASP.NET MVC控制器),其中包含您的cookie验证码,然后让您的其他控制器派生出来。

例如,为了确保默认情况下我的所有操作都需要对用户进行身份验证,我使用与此类似的操作作为基本控制器:

[Authorize]
public class CoreController : Controller
{
    /* ... */
}

然后我的家庭控制器看起来像:

public class HomeController : CoreController
{
    /* ... */
}