Redirect 如何实施";更改密码";.NETMVC4中的重定向?
在.Net MVC4中,当用户的密码被重置时,我使用一个子类将所有请求重定向到“更改密码”页面,如下所示: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
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文件中设置重定向目标