asp.net-mvc - 使用 ASP.NET MVC 重定向到 FormsAuthentication 登录页面时显示有用的消息

标签 asp.net-mvc forms-authentication http-status-code-401 authorize-attribute

我想创建一个包含 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/

相关文章:

c# - 当我回发到 Controller 时,模型的所有值均为空

asp.net-mvc - 我可以在同一个 AppHarbor 站点上运行 MVC 应用程序和 WCF Web Api 吗?

c# - Facebook OAuth 重定向问题

java - java中基于表单的身份验证的困惑

vb.net - 在 VB.Net 中通过 SSL 调用 SharePoint Web 服务(401 未授权)

asp.net-mvc - 如何让温莎城堡自动注册没有任何依赖关系的 Controller ?

asp.net - 正确创建跨域表单例份验证 cookie

asp.net - 是否可以使用表单例份验证来保护 Web 服务的安全?

reactjs - 向浏览器返回 401 或 403

azure - 无法使用 Web API 门户上传视频,未经授权的 401 错误 Azure 视频索引器