我有一个处理未经授权的用户访问的AuthorizeAttribute
的自定义实现,如果我覆盖了以下方法:AuthorizeCore
,然后HandleUnauthorizedRequest
。
- 检查用户访问权限的逻辑
AuthorizeCore.
- 重定向到控制器/操作
HandleUnauthorizedRequest
。
现在,我想知道如何将数据从授权核心发送到控制器/操作?按照该顺序:
-
AuthorizeCore
创建消息。 -
HandleUnauthorizedRequest
执行重定向并传递先前创建的消息。 - 控制器/操作接收消息。
注意:我不想通过查询字符串接收消息。
有几种方法可以做到这一点。您可以尝试添加:
filterContext.Controller.TempData["auth_fail_message"] = "Error message";
在处理未经授权的请求方法中。然后,您可以从错误操作中访问临时数据。
您也可以使用 asp.net 会话对象。
试试这个;
public string Messages { get; set; } // declare "Messages"
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
Messages = "bla bla";// Or set in controller
....
....
....
....
base.AuthorizeCore(httpContext);
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
Messages.ToString(); // Read Message ="bla bla"
base.HandleUnauthorizedRequest(filterContext);
}
2.使用控制器设置消息的方法;
[CustomAuthorize(Messages = "Bla Bla Bla")]
public ActionResult Index()
{
return View();
}