加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 设置身份验证表单loginUrl动态?

发布时间:2020-12-16 06:23:55 所属栏目:asp.Net 来源:网络整理
导读:我有一个ASP.NET MVC站点,它在操作和控制器类上使用表单身份验证和自定义AuthorizeAttribute. 我在我的web.config文件中有这个: authentication mode="Forms" forms loginUrl="~/Account/LogOn" timeout="2880" //authentication 当网站处于“正常”模式时,
我有一个ASP.NET MVC站点,它在操作和控制器类上使用表单身份验证和自定义AuthorizeAttribute.

我在我的web.config文件中有这个:

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>

当网站处于“正常”模式时,这可以正常工作.需要登录的用户被重定向到此页面.

但是当我切换到测试模式时,所有控制器都将被锁定,并且还会锁定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
                                                                         }));
        }
    }

这样,我们可以通过分配控制器和要执行的操作来为任何authorize属性指定登录路由.否则它的行为类似于标准的authorize属性.

您可以根据处于测试模式或实时模式将其更改为重定向.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读