【问题标题】:When OnAuthorization method is called?何时调用 OnAuthorization 方法?
【发布时间】:2013-08-07 13:17:02
【问题描述】:

我已经实现了自定义方法,让视图可以使用这样的用户信息:

    protected override void OnAuthorization(AuthorizationContext filterContext)
    {
        if (HttpContext.User != null)
        {
            HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
            if (authCookie != null)
            {
                FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
                JavaScriptSerializer serializer = new JavaScriptSerializer();
                AWESOMEUser user = serializer.Deserialize<AWESOMEUser>(authTicket.UserData);
                if (user == null)
                {
                    HttpContext.User = null;
                }
                else
                {
                    HttpContext.User = new PlatformUser(typeof(DBMembershipProvider).Name, user);
                }
            }
            else
            {
                HttpContext.User = null;
            }

        }
        base.OnAuthorization(filterContext);
}

问题是当数据库中的用户信息(尤其是权限)发生更改时,它不会反映在视图中。我是否应该在每次调用时都更新它,因为有更智能的方法,即其他有助于自动更新用户信息的方法?

【问题讨论】:

  • 有点难以理解您的意思,但这里有几种方法可以做到这一点。您可以在 POST 事件上调用 OnAuthorization 并更新您的模型(假设是强类型视图)...此外,AJAX 也适用于此。
  • OnAuthorization 在 OnActionExecuting 之前执行。当您运行更新您的授权的操作时,您已经执行了您向我们展示的代码。 POST 请求应该很少返回 HTML 响应。您应该在您的操作中执行您必须执行的操作,然后重定向到 GET 请求。这将解决您的问题并改善您的请求模式。

标签: c# asp.net-mvc


【解决方案1】:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-17
  • 2018-07-23
  • 1970-01-01
  • 2015-01-08
  • 2011-04-26
  • 1970-01-01
相关资源
最近更新 更多