/// <summary> /// /// </summary> /// <typeparam name="TContext"></typeparam> /// <param name="actionContext"></param> /// <param name="principal"></param> public static void SetPrincipalInContext <TContext>(ActionContextBase <TContext> actionContext, IGenericTokenPrincipal principal) where TContext : ActionContextBase <TContext>, new() { actionContext.NullCheck("actionContext"); principal.NullCheck("principal"); GenericTicketTokenContainer container = principal.GetGenericTicketTokenContainer(); GenericTicketPrincipal genericPrincipal = new GenericTicketPrincipal(container.User, container.RealUser); actionContext.Context["Principal"] = genericPrincipal; }
/// <summary> /// 从上下文中读取指定类型的Principal,如果不存在,或者类型不匹配,则抛出异常 /// </summary> /// <typeparam name="TPrincipal"></typeparam> /// <typeparam name="TActionContext"></typeparam> /// <param name="actionContext"></param> /// <returns></returns> public static TPrincipal GetPrincipalInContext <TPrincipal, TActionContext>(ActionContextBase <TActionContext> actionContext) where TPrincipal : class, IPrincipal where TActionContext : ActionContextBase <TActionContext>, new() { actionContext.NullCheck("actionContext"); object objectPrincipal = null; actionContext.Context.TryGetValue("Principal", out objectPrincipal); return(objectPrincipal as TPrincipal); }
/// <summary> /// 从上下文中读取指定类型的Principal,如果不存在,或者类型不匹配,则返回null /// </summary> /// <typeparam name="TPrincipal"></typeparam> /// <typeparam name="TActionContext"></typeparam> /// <param name="actionContext"></param> /// <returns></returns> public static TPrincipal GetAndCheckPrincipal <TPrincipal, TActionContext>(ActionContextBase <TActionContext> actionContext) where TPrincipal : class, IPrincipal where TActionContext : ActionContextBase <TActionContext>, new() { TPrincipal principal = GetPrincipal <TPrincipal>(); if (principal == null) { new InvalidOperationException(string.Format("不能在上下文中找到类型为{0}的Principal", typeof(TPrincipal).FullName)); } return(principal); }