0

我是 MVC 的新手,并试图了解控制器。请您对以下情况发表评论吗?:

我们的应用程序的业务要求是用户在使用应用程序时必须接受“隐私政策”屏幕。我通过在用户单击初始 Home 控制器索引视图中的链接时设置 cookie 来做到这一点。

但是,我需要确保我们应用程序中的任何入口点(即不仅来自索引页面,而且来自应用程序中的任何地方)都检查 cookie 的存在。对我来说,每个控制器都可以检查该值是有道理的,但我不想在每个控制器上复制相同的“如果 cookie 存在做某事”代码。那么有没有下一个级别我可以编写我的方法?

希望这是有道理的!

4

2 回答 2

1

使用自定义 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();
}
于 2013-07-17T04:55:08.413 回答
0

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

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

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

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

public class HomeController : CoreController
{
    /* ... */
}
于 2013-07-17T04:26:14.353 回答