2012-08-15 50 views
2

我认为这会很简单,但我正在努力一点。我正在为使用MVC 3的客户端开发项目,要求用户在使用该站点之前同意某些条件。我创建了一个标准的同意/不同意屏幕,当第一次进入网站时会加载,但是如果用户在网站的不同部分键入地址,他们可以跳过这些条件,例如www.test.com加载条件,但是如果用户输入www.test.com/home即可绕过这些条件。MVC 3我如何让用户查看警告/免责声明屏幕

我怎样才能确保他们已经同意的条件,才可以在网站上的任何其他地方?我一直在尝试一个会话变量,我认为这是一种方式,但是有没有办法在每个页面请求上检查这个变量,而不必在网站上的每个Controller Action中写入一个检查?

回答

6

您可以创建自定义属性并将其添加到控制器的顶部。

例如:

[AgreedToDisclaimer] 
    public ActionResult LoadPage() 
    { 
     return View(); 
    } 

如果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" } 
      }); 
    } 
} 

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

+0

谢谢达伦,应该做我以后的事情,虽然如果他们没有查看免责声明,那么我需要将他们重定向到免责声明。根据您的建议,我所做的只是将它们重定向到登录屏幕,是否可以重定向到另一个URL? – 2012-08-15 11:36:59

+1

是的,你可以使用HandleAuthorisedRequest重定向到免责声明。我会更新我的答案。 – 2012-08-15 11:48:31

+1

现货Darren正是我需要感谢的帮助! – 2012-08-15 12:33:48