在实现ActionFilterAttribute的类中重定向

时间:2011-08-24 21:43:07

标签: c# asp.net-mvc-3 attributes

public class AdministratorAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (filterContext.HttpContext.User.Identity.IsAuthenticated)
        {
            EFUserRepository repo = new EFUserRepository();
            var user = repo.FindUserByUserName(filterContext.HttpContext.User.Identity.Name);
            if (user.UserRole.Name == "Administrator")
            {
                filterContext.Result = new RedirectToRouteResult(//Redirect to the original action they tried to enter?
            }
        }
        else
        {
            //redirect to the "Home/Index" area.
        }
    }
}

我无法从此OnActionExecuting方法中重定向到某个操作。此外,如果用户获得完全授权,我将如何将用户重定向到原来的预期操作。

[Administrator]属性将放置在许多不同的控制器上,因此我必须有一种方法可以重定向到他们试图访问的相应ActionResult。

1 个答案:

答案 0 :(得分:0)

这样做的通常方法是,至少对于GET来说,对所请求的URL进行url编码并包含它。例如,对于SO,如果我们以this question作为匿名开始,然后单击登录,我们将被带到

https://stackoverflow.com/users/login?returnurl=%2fquestions%2f7182675%2fredirecting-in-a-class-that-implements-the-actionfilterattribute

同样适用于重定向;完成登录后,请检查returnurl参数,然后返回。

但是,您应该检查目标网址是相对(同一网站),还是当前网站或您拥有的其他网站/等的绝对网址( see OWASP for details - 特别是“示例场景”)。