将数据从AuthorizeCore传递到HandleUnauthorizedRequest,然后在ASP.NET MVC4中传递Action

时间:2012-11-28 15:02:38

标签: c# asp.net-mvc-4 authorize-attribute

我有一个AuthorizeAttribute的自定义实现,处理未经授权的用户访问,我覆盖了以下方法:AuthorizeCore,然后是HandleUnauthorizedRequest

  • 检查用户访问权限的逻辑位于AuthorizeCore.
  • 重定向到控制器/操作位于HandleUnauthorizedRequest

现在,我想知道如何从AuthorizeCore向控制器/操作发送数据?遵循以下顺序:

  1. AuthorizeCore创建一条消息。
  2. HandleUnauthorizedRequest执行重定向并传递先前创建的消息。
  3. 控制器/操作接收消息。
  4. 注意:我不希望通过QueryString接收邮件。

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分: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.Method使用控制器设置消息;

[CustomAuthorize(Messages = "Bla Bla Bla")]
public ActionResult Index()
{
    return View();
}