MVC 3如何让用户查看警告/免责声明屏幕

Chr*_*nty 2 c# asp.net-mvc asp.net-mvc-3

我觉得这很简单,但我有点挣扎.我正在为使用MVC 3的客户开发一个项目,该项目要求用户在使用该站点之前同意某些条件.我创建了一个标准的同意/不同意屏幕,该屏幕在首次进入网站时加载,但如果用户在网站的不同部分键入地址,他们可以绕过条件,例如www.test.com加载条件但是如果用户输入www.test.com/home他们绕过条件.

如何确保他们在网站上的任何其他地方之前已经同意这些条件?我一直在尝试一个会话变量,我认为这是可行的方法,但是有没有办法在每个页面请求上检查这个变量而不必对网站上的每个Controller Action进行检查?

Dar*_*ren 6

您可以创建自定义属性并将其添加到Controller的顶部.

例如:

    [AgreedToDisclaimer]
    public ActionResult LoadPage()
    {
         return View();
    }
Run Code Online (Sandbox Code Playgroud)

如果AgreedToDisclaimer返回true,则只加载视图.

public class AgreedToDisclaimerAttribute : AuthorizeAttribute
{

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
       if (httpContext == null)
        throw new ArgumentNullException("httpContext");

       // logic to check if they have agreed to disclaimer (cookie, session, database)
       return true;
    }

   protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
   {
          // Returns HTTP 401 by default - see HttpUnauthorizedResult.cs.
           filterContext.Result = new RedirectToRouteResult(
            new RouteValueDictionary 
            {
             { "action", "ActionName" },
             { "controller", "ControllerName" },
             { "parameterName", "parameterValue" }
            });
   }
}
Run Code Online (Sandbox Code Playgroud)

http://msdn.microsoft.com/en-us/library/dd410209(v=vs.90).aspx

http://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute.handleunauthorizedrequest.aspx