我有一个 ASP.NET MVC 站点,它在操作和 Controller 类上使用带有自定义 AuthorizeAttribute
的表单例份验证。
我的 web.config 文件中有这个:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
当网站处于“正常”模式时,这可以正常工作。需要登录的用户会被重定向到该页面。
但是当我切换到测试模式时,所有 Controller 以及 AccountController 都将被锁定。
现在,当我处于测试模式时,我需要更改登录网址以指向未锁定且专为测试场景而设计的 Controller 操作。
如何更改登录网址或者是否可以从 AuthorizeAttribute
重定向?
最佳答案
我们所做的是使用自定义的 Authorize 属性进行覆盖,该属性会重定向到 HandleUnauthorizedRequest 函数,如下所示:
public class AuthorizeAttribute : System.Web.Mvc.AuthorizeAttribute
{
public string LoginController { get; set; }
public string LoginAction { get; set; }
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (string.IsNullOrEmpty(LoginController)&&string.IsNullOrEmpty(LoginAction))
base.HandleUnauthorizedRequest(filterContext);
filterContext.Result =new RedirectToRouteResult(
new RouteValueDictionary(new
{
controller = LoginController,
action = LoginAction,
returnUrl = HttpContext.Current.Request.Url
}));
}
}
这样我们就可以通过分配要执行的 Controller 和操作来指定任何授权属性的登录路由。否则它的行为类似于标准授权属性。
您可以更改此设置以根据处于测试模式或实时模式进行重定向。
关于asp.net - 设置动态验证表单loginUrl?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8842231/