예제 #1
0
        internal static MyContextGroup GetOrCreate(this MyRequestContext context, string group, bool autoCreate = true)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            if (string.IsNullOrWhiteSpace(group))
            {
                throw new ArgumentNullException(nameof(group));
            }

            var theGroup = context.Groups.SingleOrDefault(x => x.GroupName == group);

            if (theGroup == null)
            {
                if (autoCreate)
                {
                    theGroup = new MyContextGroup {
                        GroupName = @group
                    };
                    context.Groups.Add(theGroup);
                }
            }
            return(theGroup);
        }
예제 #2
0
        public static MyRequestContext SetUserInfo(this MyRequestContext context, HttpRequest httpRequest)
        {
            var theGroup = context.GetOrCreate(context.GetGroupName_UserInfos());

            //todo
            return(context);
        }
예제 #3
0
        public static MyRequestContext SetQueryInfo(this MyRequestContext context, HttpRequest httpRequest)
        {
            var theGroup        = context.GetOrCreate(context.GetGroupName_QueryInfos());
            var queryCollection = httpRequest.Query;
            var keys            = queryCollection.Keys;

            foreach (var key in keys)
            {
                StringValues values;
                if (!queryCollection.TryGetValue(key, out values))
                {
                    theGroup.Items[key] = null;
                }
                else
                {
                    values = values.Where(x => !string.IsNullOrWhiteSpace(x)).ToArray();
                    foreach (var value in values)
                    {
                        //set by last one
                        theGroup.Items[key] = value;
                    }
                }
            }
            return(context);
        }
예제 #4
0
        public static MyUserInfo GetUserInfo(this MyRequestContext context)
        {
            var info     = new MyUserInfo();
            var theGroup = context.GetOrCreate(context.GetGroupName_UserInfos());

            theGroup.Items.SetProperties(info);
            return(info);
        }
예제 #5
0
        public static MyRequestContext AppendPageInfos(this MyRequestContext context, ViewContext viewContext)
        {
            var theGroup   = context.GetOrCreate(context.GetGroupName_PageInfos());
            var myPageInfo = viewContext.CreateMyPageInfo();

            theGroup.Items[viewContext.View.Path] = myPageInfo.ToJson(false);
            return(context);
        }
예제 #6
0
        public static IList <MyPageInfo> GetPageInfos(this MyRequestContext context)
        {
            var myPageInfos = new List <MyPageInfo>();
            var theGroup    = context.GetOrCreate(context.GetGroupName_PageInfos(), false);

            if (theGroup == null)
            {
                return(myPageInfos);
            }

            var jsonList = theGroup.Items.Values.ToList();

            return(jsonList.Select(x => x.FromJson <MyPageInfo>(null)).Where(x => x != null).ToList());
        }
예제 #7
0
        public static MyRequestContext SetRouteInfo(this MyRequestContext context, RouteData routeData)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            var theGroup = context.GetOrCreate(context.GetGroupName_RouteInfos());

            foreach (var item in routeData.DataTokens)
            {
                theGroup.Items[item.Key] = item.Value?.ToString();
            }
            foreach (var item in routeData.Values)
            {
                theGroup.Items[item.Key] = item.Value?.ToString();
            }
            return(context);
        }
예제 #8
0
        public static MyRequestContext GetMyRequestContext(this HttpContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            if (context.Items[MyRequestContextCacheKey] != null)
            {
                return((MyRequestContext)context.Items[MyRequestContextCacheKey]);
            }

            var requestContext = MyRequestContext.Create()
                                 .SetRouteInfo(context.GetRouteData())
                                 .SetQueryInfo(context.Request)
                                 .SetUserInfo(context.Request);

            context.Items[MyRequestContextCacheKey] = requestContext;

            return(requestContext);
        }
예제 #9
0
 public static string GetGroupName_UserInfos(this MyRequestContext context)
 {
     return(Group_UserInfos);
 }
예제 #10
0
        public static MyRequestContext Create()
        {
            var context = new MyRequestContext();

            return(context);
        }