ProfileRequiredActionFilter -永久重定向用户

本文关键字:重定向 用户 ProfileRequiredActionFilter | 更新日期: 2023-09-27 18:18:26

我有一个ProfileRequiredActionFilter的实现。它检查用户是否正确填写了配置文件-如果没有,它在RegisterSecondStep上重定向用户。

问题是这个重定向永久用户在循环…

public class ProfileRequiredActionFilter : IActionFilter
{
    #region Implementation of IActionFilter
    public void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (HttpContext.Current.User.Identity.IsAuthenticated)
        {
            User user = UserTools.getUser(HttpContext.Current.User.Identity.Name);
            if (user.NickName == null || user.Firstname == null || user.Surname == null || user.StateId == 0)
            {
                filterContext.Result = new RedirectResult("/Account/RegisterSecondStep");
            }
        }
    }
    public void OnActionExecuted(ActionExecutedContext filterContext)
    {
    }
    #endregion
}

我在我的代码中添加了这一部分-现在用户重定向一次到RegisterSecondStep,它不允许做任何事情。总的来说,还不错。但是如何允许用户登出呢?这个按钮也被阻止了,如果我点击"注销",我已经被重定向到…RegisterSecondStep .

public class ProfileRequiredActionFilter : IActionFilter
{
    #region Implementation of IActionFilter
    public void OnActionExecuting(ActionExecutingContext filterContext)
    {
        string text = HttpContext.Current.Request.Url.AbsolutePath;
        if (HttpContext.Current.User.Identity.IsAuthenticated)
        {
            User user = UserTools.getUser(HttpContext.Current.User.Identity.Name);
            if (user.NickName == null || user.Firstname == null || user.Surname == null || user.StateId == 0)
            {
                if (text != "/Account/RegisterSecondStep")
                {
                    filterContext.Result = new RedirectResult("/Account/RegisterSecondStep");
                }
            }
        }
    }
    public void OnActionExecuted(ActionExecutedContext filterContext)
    {
    }
    #endregion
}

我是这样运行这个过滤器的

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
        filters.Add(new ProfileRequiredActionFilter());
    }

ProfileRequiredActionFilter -永久重定向用户

我不知道如何将这个属性应用到action中但是你不应该将这个属性应用到RegisterSecondStep或Signout这样的action中。继承自ActionFilterAttribute

public class ProfileRequiredAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        // your logic
    }
}

并将该属性应用于控制器:

[ProfileRequired]
public class SomeController : Controller
{
}

或行动:

public class SomeController : Controller
{
    [ProfileRequired]
    public ActionResult Index() 
    {
    }
}

另一种选择是提供另一个属性来覆盖该行为,并在ProfileRequiredActionFilter中检查该属性是否应用于动作。

if (filterContext.ActionDescription.IsDefined(typeof(ProfileNotRequiredAttribute), inherit: false))
{
    // do not redirect
}