我想创建一个包含 Message
属性的自定义 AuthorizeAttribute
。问题是,我的 FormsAuthentication 重定向到指定的 loginUrl。该 View 如何访问属性的 Message 属性?
例如,我使用我的自定义 AuthorizeAttribute 执行此操作
[Authorize(Message="You must be logged in to see user settings.")]
public ActionResult Settings()
{
return View();
}
如果用户未登录,它会被重定向到/Account/LogOn(感谢 web.config 中的 FormsAuthentication
设置)。我想显示“您必须登录才能看到登录 View 上的“用户设置”,以便用户知道为什么他们被重定向到登录页面
最佳答案
一种选择是将 Message 属性的值放入自定义 AuthorizeAttribute 的 HandleUnautherizeRequest 方法中的 TempData 中。然后在您的帐户 Controller 上的登录操作中,从 TempData 中获取值并将其放入 ViewBag 或您的模型中,以便 View 可以访问它。
授权属性:
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
base.HandleUnauthorizedRequest(filterContext);
filterContext.Controller.TempData["MessageFromMyAttribute"] = this.Message;
}
账户 Controller
public ActionResult LogOn()
{
ViewBag.AttributeMessage = TempData["MessageFromMyAttribute"];
return View();
}
因为 MVC 在幕后进行重定向,所以 TempData 中的值将在整个重定向过程中保持不变。
关于asp.net-mvc - 使用 ASP.NET MVC 重定向到 FormsAuthentication 登录页面时显示有用的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6164882/