Asp.net MVC在某些情况下阻止用户访问整个应用程序

Asp.net MVC在某些情况下阻止用户访问整个应用程序,asp.net,asp.net-mvc,asp.net-mvc-3,Asp.net,Asp.net Mvc,Asp.net Mvc 3,我有一个网站,例如网页a,B,C,D,。。。。我希望用户只有在注册后才能访问页面A。要访问剩余页面,用户需要完成一些加入手续,其中包括付款等 现在最简单的方法是,我在当前完成的所有页面中添加一个检查,以确保页面B、C、D。。。仅当用户已完成所有加入手续时,才会显示“请求”。这将需要我重新工作所有这些现有的网页一遍。此外,所有未来开发的页面都需要记住添加该检查 为了解决这个问题,我使用了一个自定义的authorize属性类,该类继承自AuthorizeAttribute,并在其中检查了重写的OnA

我有一个网站,例如网页a,B,C,D,。。。。我希望用户只有在注册后才能访问页面A。要访问剩余页面,用户需要完成一些加入手续,其中包括付款等

现在最简单的方法是,我在当前完成的所有页面中添加一个检查,以确保页面B、C、D。。。仅当用户已完成所有加入手续时,才会显示“请求”。这将需要我重新工作所有这些现有的网页一遍。此外,所有未来开发的页面都需要记住添加该检查

为了解决这个问题,我使用了一个自定义的authorize属性类,该类继承自AuthorizeAttribute,并在其中检查了重写的OnAuthorization方法,如下面的代码段所示

        else if (!SessionCache.FormalitiesCompleted)
        {
            //force completion of formalities
            if (!( string.Equals(filterContext.ActionDescriptor.ActionName, "Index", StringComparison.InvariantCultureIgnoreCase)
                  || string.Equals(filterContext.ActionDescriptor.ActionName, "Options", StringComparison.InvariantCultureIgnoreCase)
                  || string.Equals(filterContext.ActionDescriptor.ActionName, "Index_B", StringComparison.InvariantCultureIgnoreCase)
                  || string.Equals(filterContext.ActionDescriptor.ActionName, "Index_C", StringComparison.InvariantCultureIgnoreCase)
                    && string.Equals(filterContext.ActionDescriptor.ControllerDescriptor.ControllerName, "Formalities", StringComparison.InvariantCultureIgnoreCase)))
            {
                string _action = filterContext.ActionDescriptor.ActionName;
                filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Formalities", action = _action, area = "FormalitiesArea" }));
            }


        }
正如您所看到的,IF中有太多或太多的条件。我怀疑这会随着手续的复杂性增加而增加

有没有更好的方法来强制用户在完成手续之前不要访问网站上的任何其他页面


谢谢您的时间。

您可以创建一个Actin筛选器,并将其应用于您想要限制访问的操作或类。在actions筛选器中,您需要重写OnActionExecuting方法并在其中实现检查逻辑。您可以根据需要允许或拒绝访问这些视图


查看此示例

在控制器中使用[Authorize]注释如何?通过创建您自己的,您应该能够根据您选择使用或创建的任何会员资格提供商定制每个操作的授权。

您可能应该查看
[Authorize属性]
如果您使用该属性装饰操作,则只有登录的用户才能访问该操作,其他用户将被重定向到登录页面

对于付费/注册用户,我将从中继承并生成PaidUserAuthorize属性:

public class PaidUserAuthorizeAttribute : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        base.OnAuthorization(filterContext);

        if(filterContext.Result is HttpUnauthorizedResult)
        {
            filterContext.Result = new RedirectResult("/PaymentPage");
        }
    }
}
因此,用

[PaidUserAuthorize(Roles=“PaidUser”,“超级用户”)]

将未付款用户重定向到付款页面

用户付费后-将其添加到PaidUser角色。因此,当他们再次参加活动时,他们将被允许访问