Ban*_*hee 4 asp.net authentication asp.net-mvc
我有一个ASP.NET MVC站点,它使用表单身份验证和AuthorizeAttribute操作和控制器类上的自定义.
我在我的web.config文件中有这个:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
Run Code Online (Sandbox Code Playgroud)
当网站处于"正常"模式时,这可以正常工作.需要登录的用户被重定向到此页面.
但是当我切换到测试模式时,所有控制器都将被锁定,并且还会锁定AccountController.
我现在需要在我处于测试模式时使用loginUrl来指向未锁定的控制器操作,这是针对测试场景的特殊操作.
如何更改loginUrl或者是否可以从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
}));
}
}
Run Code Online (Sandbox Code Playgroud)
这样,我们可以通过分配控制器和要执行的操作来为任何authorize属性指定登录路由.否则它的行为类似于标准的authorize属性.
您可以根据处于测试模式或实时模式将其更改为重定向.
| 归档时间: |
|
| 查看次数: |
2576 次 |
| 最近记录: |