5

如果我覆盖以下方法,我有一个处理未经授权的用户访问的自定义实现AuthorizeAttributeAuthorizeCore然后HandleUnauthorizedRequest.

  • 检查用户访问的逻辑在AuthorizeCore.
  • 到控制器/动作的重定向在HandleUnauthorizedRequest.

现在,我想知道如何将数据从 AuthorizeCore 发送到控制器/动作?按照这个顺序:

  1. AuthorizeCore创建一条消息。
  2. HandleUnauthorizedRequest执行重定向并传递先前创建的消息。
  3. 控制器/动作接收消息。

注意:我不想通过 QueryString 接收消息。

4

2 回答 2

0

有几种方法可以做到这一点。您可以尝试添加:

filterContext.Controller.TempData["auth_fail_message"] = "Error message"; 

在 HandleUnauthorizedRequest 方法中。然后您可以从错误操作中访问临时数据。
您也可以使用 asp.net 会话对象。

于 2012-11-28T15:09:48.157 回答
0

尝试这个;

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();
}
于 2017-09-15T06:42:43.820 回答