2

我想做一个AuthorizeAttribute包含Message属性的自定义。问题是,我的 FormsAuthentication 重定向到指定的 loginUrl。该视图如何访问属性的 Message 属性?

例如,我使用自定义 AuthorizeAttribute 执行此操作

[Authorize(Message="You must be logged in to see user settings.")]
public ActionResult Settings()
{
    return View();
}

FormsAuthentication如果用户未登录,它将被重定向到 /Account/LogOn(感谢 web.config 中的设置)。我想在登录视图上显示“您必须登录才能查看用户设置”,以便用户知道为什么他们被重定向到登录页面

4

2 回答 2

5

一种选择是将 Message 属性的值放入自定义 AuthorizeAttribute 的 HandleUnautherizeRequest 方法中的 TempData 中。然后在您的 Account 控制器上的 LogOn 操作中,从 TempData 中获取值并将其放入 ViewBag 或您的模型中,以便 View 可以访问它。

授权属性:

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{            
    base.HandleUnauthorizedRequest(filterContext);
    filterContext.Controller.TempData["MessageFromMyAttribute"] = this.Message;
}

帐户控制器

public ActionResult LogOn()
{
    ViewBag.AttributeMessage = TempData["MessageFromMyAttribute"];
    return View();
}

因为 MVC 在后台进行重定向,所以 TempData 中的值将在重定向中保持不变。

于 2011-05-29T00:28:41.210 回答
2

请执行下列操作:

  1. 创建自己的属性,继承自AuthorizeAttribute
  2. 在您的过滤器中,将消息添加到TempData
  3. 在需要登录时重定向到的操作中,从中获取消息TempData并将其传递给视图。
于 2011-05-29T00:26:54.610 回答