C# ProfileRequiredActionFilter-永久重定向用户
我有一个ProfileRequiredActionFilter的实现。它检查用户是否正确填写了配置文件-如果没有,则在RegisterSecondStep上重定向用户 问题是此重定向将永久性地在循环中重定向用户C# ProfileRequiredActionFilter-永久重定向用户,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我有一个ProfileRequiredActionFilter的实现。它检查用户是否正确填写了配置文件-如果没有,则在RegisterSecondStep上重定向用户 问题是此重定向将永久性地在循环中重定向用户 public class ProfileRequiredActionFilter : IActionFilter { #region Implementation of IActionFilter public void OnActionExecuting(Action
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,不允许它做任何事情。一般来说,不错。但如何允许用户注销?此按钮也被阻止,如果我单击“注销”,我将被重定向到<代码>寄存器秒步
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());
}
我不知道如何将该属性应用于操作,但不应将该属性应用于诸如RegisterSecondStep或Signout之类的操作。只需从
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
}
在中使用了这种方法。好的,请告诉我如何不对这些操作应用该过滤器。我在第一篇文章中添加了一个
RegisterGlobalFilters
代码。当做