我有一个网站,例如页面 A、B、C、D、.... 我希望用户在注册后只能访问页面 A。要访问其余页面,用户需要完成一些加入手续,其中包括付款。
现在最简单的方法是在我当前完成的所有页面中添加一个检查,以确保仅在用户完成所有加入手续后才显示请求的页面 B、C、D...。这将需要我重新处理所有现有的页面。此外,所有未来开发的页面都需要记住添加该检查。
为了解决这个问题,我使用了一个从 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 中有太多的 OR 条件。我怀疑这会随着手续复杂性的增加而增加。
有没有更好的方法来强制用户在完成手续之前不要访问网站上的任何其他页面?
谢谢你的时间。