Redirect 如何实施";更改密码";.NETMVC4中的重定向?

Redirect 如何实施";更改密码";.NETMVC4中的重定向?,redirect,asp.net-mvc-4,filter,authorization,t4mvc,Redirect,Asp.net Mvc 4,Filter,Authorization,T4mvc,在.Net MVC4中,当用户的密码被重置时,我使用一个子类将所有请求重定向到“更改密码”页面,如下所示: public override void OnAuthorization(AuthorizationContext filterContext) { // Call base class method first base.OnAuthorization(filterContext); // Only redirect if

在.Net MVC4中,当用户的密码被重置时,我使用一个子类将所有请求重定向到“更改密码”页面,如下所示:

    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        // Call base class method first
        base.OnAuthorization(filterContext);

        // Only redirect if password change is required and the requested action
        // is not "Change Password"
        if (!passwordChangeRequired
            && !(filterContext.Controller is ApplicantController &&
                 MVC.Applicant.ActionNames.ChangePassword.Equals(filterContext.ActionDescriptor.ActionName)))
        {
            filterContext.Result = new RedirectToRouteResult(
                new RouteValueDictionary
                {
                    { "controller", MVC.Applicant.Name },
                    { "action", MVC.Applicant.ActionNames.ChangePassword }
                });
        }
    }
我刚刚写了这段代码,它似乎可以工作,但我还没有信心,不知道它是否可以简化

特别是关于控制器和操作-项目正在使用,那么这两者是否需要分别包含在检查和重定向中,或者它们是否可以以某种方式组合在一起

还应该在开始或结束时调用
base.OnAuthorization


感谢您的指点……

我最后稍微修改了一下,用它来代替

如果这对任何人都有用,代码如下:

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
public class ChangePasswordAttribute : ActionFilterAttribute
{
    /// <summary>
    /// Filter on executing
    /// </summary>
    /// <param name="filterContext">The current action context</param>
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (filterContext == null)
        {
            throw new ArgumentNullException("filterContext");
        }

        // Don't redirect to "Change Password" action if it is the current action
        if (filterContext.Controller is ApplicantController &&
            MVC.Applicant.ActionNames.ChangePassword.Equals(filterContext.ActionDescriptor.ActionName))
        {
            return;
        }

        // Redirect if password change is required
        if ((filterContext.HttpContext.Session[SessionKeys.PasswordChangeRequired] != null) 
            && (bool)filterContext.HttpContext.Session[SessionKeys.PasswordChangeRequired])
        {
            // Save route in session so the user can be redirected appropriately after a successful password change
            RouteValueDictionary routeValues = new RouteValueDictionary(filterContext.RouteData.Values);
            filterContext.HttpContext.Session[SessionKeys.PasswordChangeRouteValues] = routeValues;

            filterContext.Result = new RedirectToRouteResult(
                new RouteValueDictionary
                {
                    { "controller", MVC.Applicant.Name },
                    { "action", MVC.Applicant.ActionNames.ChangePassword }
                });
        }
    }
}
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
公共类ChangePasswordAttribute:ActionFilterAttribute
{
/// 
///执行时过滤
/// 
///当前的行动背景
公共覆盖无效OnActionExecuting(ActionExecutingContext filterContext)
{
如果(filterContext==null)
{
抛出新ArgumentNullException(“filterContext”);
}
//如果是当前操作,则不要重定向到“更改密码”操作
如果(filterContext.Controller)是应用程序控制器&&
MVC.applicator.ActionNames.ChangePassword.Equals(filterContext.ActionDescriptor.ActionName))
{
返回;
}
//如果需要更改密码,则重定向
if((filterContext.HttpContext.Session[SessionKeys.PasswordChangeRequired]!=null)
&&(bool)filterContext.HttpContext.Session[SessionKeys.PasswordChangeRequired])
{
//在会话中保存路由,以便在成功更改密码后可以适当重定向用户
RouteValueDictionary routeValues=新的RouteValueDictionary(filterContext.RouteData.Values);
filterContext.HttpContext.Session[SessionKeys.PasswordChangeRouteValues]=routeValues;
filterContext.Result=新的RedirectToRouteResult(
新RouteValueDictionary
{
{“controller”,MVC.applicator.Name},
{“操作”,MVC.applicator.ActionNames.ChangePassword}
});
}
}
}

您的实现看起来不错。但如果您想要简单,可以使用标准的
[Authorize]
属性并在web.config文件中设置重定向目标