如果需要条件,如何将用户重定向到特定页面

Fab*_*cio 0 c# entity-framework asp.net-mvc-4

我想允许用户只有在激活他的帐户(电子邮件确认等)时才能访问某些站点区域.

我想允许他登录,但如果他没有激活他的帐户(我user.confirmed有财产),我想将他重定向到一个页面,提醒他确认他的帐户.

我怎样才能做到这一点?我不能if在每个控制器方法中放置一个来检查它.

Jam*_*mes 5

您可以编写自己的AuthorizeAttribute并从那里重定向用户,这意味着它就像装饰您的动作一样简单,即

public class ConfirmedUsersOnly: AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var loggedInUser = // pull user from storage
        return httpContext.User.Identity.IsAuthenticated && loggedInUser.confirmed;
    }

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        if (!filterContext.HttpContext.Request.IsAuthenticated)
        {
            // handle normal unauthorized redirect (e.g. login page)
            base.HandleUnauthorizedRequest(filterContext);
        }
        else
        {
            // redirect users who are logged in but not confirmed
            filterContext.HttpContext.Response.Redirect("NotConfirmedUrl");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

用法

[ConfirmedUsersOnly]
public ActionResult ConfirmedAccountAction()
{
    ...
}
Run Code Online (Sandbox Code Playgroud)