MVC 过滤器操作重定向到无限循环
MVC filter action redirect to infinite loop
我正在尝试创建过滤器,该过滤器应该检查角色(不是 asp .NET 成员身份或身份,而是我自己的身份),我希望限制所有控制器操作(我们称之为"AuthController" 以下)来自低角色级别用户。
在我的过滤条件中,我删除了限制用户访问主页。
当我在 AuthController 中删除 Ajax 中的高级角色时出现问题然后我的部分视图将我带到主页。
有没有一种优雅的方法可以避免这种情况?
[HttpPost, ActionName("DeleteRole")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(Guid UserId, Guid RoleId)
{
CustomProvider CP = new CustomProvider();
CP.DeleteRoleFromUser(UserId, RoleId);
return PartialView("RolesDelete", db.Role.Where(p => p.Id == RoleId).SingleOrDefault());
}
过滤器:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
if (filterContext.HttpContext.User.Identity.IsAuthenticated && string.IsNullOrEmpty(NameFromExternal))
{
NameFromExternal = filterContext.HttpContext.User.Identity.Name;
}
CustomProvider cp = new CustomProvider();
if (CustomRoleProvider.Instance.IsUserInRole(cp.getADNameFromFullDomainName(NameFromExternal), eRoles.High.ToString()))
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "controller", "Auth" }, { "action", "Index" } });
filterContext.Result.ExecuteResult(filterContext.Controller.ControllerContext);
}
else
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "controller", "Home" }, { "action", "Index" } });
filterContext.Result.ExecuteResult(filterContext.Controller.ControllerContext);
}
}
为什么不允许 Ajax 查询?
将此添加到您的条件中:
!filterContext.HttpContext.Request.IsAjaxRequest()
在过滤器中,让未经授权的用户执行一些控制器操作,这些操作将热点引用到主页,并在部分视图中设置将作为部分页面出现的重定向语句,他限制了。
控制器:
public ActionResult Redirection(string controller, string view)
{
ViewBag.TargetCtrl = "Home";
ViewBag.TargetView = "Index";
ViewBag.TargetTitle = "Home Page";
return PartialView("~/Views/Shared/Redirection.cshtml");
}
查看
You ara redirected to @ViewBag.TargetTitle
<script>
window.location.href = '@Url.Action(ViewBag.TargetView, ViewBag.TargetCtrl)';
</script>
现在用户将重定向到主页并且不会看到主页的局部视图。
我正在尝试创建过滤器,该过滤器应该检查角色(不是 asp .NET 成员身份或身份,而是我自己的身份),我希望限制所有控制器操作(我们称之为"AuthController" 以下)来自低角色级别用户。
在我的过滤条件中,我删除了限制用户访问主页。
当我在 AuthController 中删除 Ajax 中的高级角色时出现问题然后我的部分视图将我带到主页。
有没有一种优雅的方法可以避免这种情况?
[HttpPost, ActionName("DeleteRole")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(Guid UserId, Guid RoleId)
{
CustomProvider CP = new CustomProvider();
CP.DeleteRoleFromUser(UserId, RoleId);
return PartialView("RolesDelete", db.Role.Where(p => p.Id == RoleId).SingleOrDefault());
}
过滤器:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
if (filterContext.HttpContext.User.Identity.IsAuthenticated && string.IsNullOrEmpty(NameFromExternal))
{
NameFromExternal = filterContext.HttpContext.User.Identity.Name;
}
CustomProvider cp = new CustomProvider();
if (CustomRoleProvider.Instance.IsUserInRole(cp.getADNameFromFullDomainName(NameFromExternal), eRoles.High.ToString()))
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "controller", "Auth" }, { "action", "Index" } });
filterContext.Result.ExecuteResult(filterContext.Controller.ControllerContext);
}
else
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "controller", "Home" }, { "action", "Index" } });
filterContext.Result.ExecuteResult(filterContext.Controller.ControllerContext);
}
}
为什么不允许 Ajax 查询?
将此添加到您的条件中:
!filterContext.HttpContext.Request.IsAjaxRequest()
在过滤器中,让未经授权的用户执行一些控制器操作,这些操作将热点引用到主页,并在部分视图中设置将作为部分页面出现的重定向语句,他限制了。
控制器:
public ActionResult Redirection(string controller, string view)
{
ViewBag.TargetCtrl = "Home";
ViewBag.TargetView = "Index";
ViewBag.TargetTitle = "Home Page";
return PartialView("~/Views/Shared/Redirection.cshtml");
}
查看
You ara redirected to @ViewBag.TargetTitle
<script>
window.location.href = '@Url.Action(ViewBag.TargetView, ViewBag.TargetCtrl)';
</script>
现在用户将重定向到主页并且不会看到主页的局部视图。