asp.net - 设置动态验证表单loginUrl?

标签 asp.net asp.net-mvc authentication

我有一个 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/

相关文章:

c# - 按句点将字符串格式化为 3 位数字组

asp.net - InProc 与 Redis (Asp.Net MVC 5) 中的 session 存储,考虑到可扩展性

c# - 从 2 个下拉列表中获取值的 Controller 操作

security - ubuntu 16.04 LTS 上的 2FA 登录

python - Django身份验证错误: 'str' object has no attribute 'pk'

python - 如何在 django 中对每个应用程序的用户进行身份验证

c# - 声明将由许多 WebMethod 函数使用的单个静态变量

c# - 将背景颜色应用于 GridView 中的所有标签

c# - 使用 Asp.Net MVC 和 IIS 上传大于 3GB 的文件

c# - 使用 SMTP 发送带附件的邮件