Example #1
0
        public bool TryParseJSON(object obj)
        {
            dynamic dobj = null;

            if (obj is string)
            {
                dobj = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase);
                FrameDLRObject.TryParse(ComFunc.nvlNotrim(obj), FrameDLRFlags.SensitiveCase, dobj);
                if (dobj == null)
                {
                    return(false);
                }
            }
            else if (obj is FrameDLRObject)
            {
                dobj = (FrameDLRObject)obj;
            }
            else
            {
                return(false);
            }

            if (dobj.functionid == null ||
                dobj.pageurl == null ||
                dobj.actions == null)
            {
                return(false);
            }

            this._fileds           = ComFunc.nvl(dobj.fields);
            this._functionid       = ComFunc.nvl(dobj.functionid);
            this._pageurl          = ComFunc.nvl(dobj.pageurl);
            this._parentfunctionid = ComFunc.nvl(dobj.parentid);
            if (dobj.actions is string[])
            {
                this.Actions.AddRange((string[])dobj.actions);
            }
            else if (dobj.actions is object[])
            {
                var arr = (object[])dobj.actions;

                foreach (var item in arr)
                {
                    Actions.Add(ComFunc.nvl(item));
                }
            }
            else if (dobj.actions is List <object> )
            {
                var arr = (List <object>)dobj.actions;

                foreach (var item in arr)
                {
                    Actions.Add(ComFunc.nvl(item));
                }
            }

            return(true);
        }
Example #2
0
        public bool TryParseJSON(object obj)
        {
            if (obj == null)
            {
                return(false);
            }

            dynamic dobj = null;

            if (obj is string)
            {
                FrameDLRObject.TryParse(ComFunc.nvlNotrim(obj), FrameDLRFlags.SensitiveCase, dobj);
                if (dobj == null)
                {
                    return(false);
                }
            }
            else if (obj is FrameDLRObject)
            {
                dobj = (FrameDLRObject)obj;
            }
            else
            {
                return(false);
            }


            UserID    = dobj.UserID;
            UserName  = dobj.UserName;
            RoleID    = dobj.RoleID;
            RoleName  = dobj.RoleName;
            GroupID   = dobj.GroupID;
            GroupName = dobj.GroupName;
            TeamID    = dobj.TeamID;
            TeamName  = dobj.TeamName;
            AgentID   = dobj.AgentID;
            AgentName = dobj.AgentName;
            if (dobj.Actions is FrameDLRObject)
            {
                var actions = new ActionCollection();
                if (actions.TryParseJSON(dobj.Actions))
                {
                    SetValue("Actions", actions);
                }
            }
            LoginTime          = dobj.LoginTime;
            ForceLogoutTimeOut = dobj.ForceLogoutTimeOut;
            LoginIPAddress     = dobj.LoginIPAddress;
            UserSex            = dobj.UserSex == null ? SexType.Male : ComFunc.EnumParse <SexType>(ComFunc.nvl(dobj.UserSex));

            return(true);
        }
Example #3
0
        public static void Prepare(HttpContext context, ref WP p, ref WD d)
        {
            var url = context.Request.Path.Replace("\\", "/");

            if (url == "" && url == "/")
            {
                url = GlobalCommon.WebCommon.StartPage;
            }

            p.RequestResourcePath = ComFunc.nvl(url);
            var ext = Path.GetExtension(p.RequestResourcePath);

            if (ext != "")
            {
                string   reqpath = Path.GetFileNameWithoutExtension(p.RequestResourcePath);
                string[] ss      = reqpath.Split('.');
                p.Action = ss.Length > 1 ? ss[1] : "";
                p.RequestResourceName = ss.Length > 0 ? ss[0] : "";
                p.RequestResources    = ss;
            }
            else
            {
                var turl = p.RequestResourcePath.Replace("~", "");
                turl = turl.StartsWith("/") ? turl.Substring(1) : turl;
                string[] ss = turl.Split('/');
                p.Action = ss.Length > 1 ? ss[1] : "";
                p.RequestResourceName = ss.Length > 0 ? ss[0] : "";
                p.RequestResources    = ss;
            }


            foreach (string s in context.Request.QueryString.Keys)
            {
                p[DomainKey.QUERY_STRING, s] = context.Request.QueryString[s];
            }

            foreach (string s in context.Request.Form.AllKeys)
            {
                p[DomainKey.POST_DATA, s] = context.Request.Form[s];
            }

            //获取上传文件的二进制流
            foreach (string s in context.Request.Files.AllKeys)
            {
                p[DomainKey.UPDATE_FILE, s] = context.Request.Files[s];
            }
            lock (lockobj)
            {
                //websocket下无session
                if (!context.IsWebSocketRequest)
                {
                    //因websocket无session需要将cache中的数据域与session中同步一下
                    var sessionid = context.Session.SessionID;
                    if (sessionid != "" && GlobalCommon.ApplicationCache.Get("__frame_session__" + sessionid) != null)
                    {
                        var sessionobj = (FrameDLRObject)GlobalCommon.ApplicationCache.Get("__frame_session__" + sessionid);
                        foreach (var key in sessionobj.Keys)
                        {
                            context.Session[key] = sessionobj.GetValue(key);
                        }
                        var sessionkeys = context.Session.Keys.Cast <string>().ToArray();;
                        var removekeys  = new List <string>();
                        foreach (string s in sessionkeys)
                        {
                            if (sessionobj.GetValue(s) == null)
                            {
                                removekeys.Add(s);
                            }
                        }
                        foreach (var s in removekeys)
                        {
                            context.Session.Remove(s);
                        }
                    }
                    var skeys = context.Session.Keys.Cast <string>().ToArray();
                    foreach (string s in skeys)
                    {
                        //深度复制session中的对象,防止p在最后释放时导致session对象丢失
                        p[DomainKey.SESSION, s] = ComFunc.CloneObject(context.Session[s]);
                    }
                }
                else
                {
                    var sessionid = context.Request.Params["ASP.NET_SessionId"];
                    if (sessionid != "" && GlobalCommon.ApplicationCache.Get("__frame_session__" + sessionid) != null)
                    {
                        var sessionobj = (FrameDLRObject)GlobalCommon.ApplicationCache.Get("__frame_session__" + sessionid);
                        foreach (var key in sessionobj.Keys)
                        {
                            //深度复制session中的对象,防止p在最后释放时导致session对象丢失
                            p[DomainKey.SESSION, key] = ComFunc.CloneObject(sessionobj.GetValue(key));
                        }
                    }
                }


                foreach (var s in context.Application.Keys)
                {
                    //深度复制application中的对象,防止p在最后释放时导致application对象丢失
                    p[DomainKey.APPLICATION, s.ToString()] = ComFunc.CloneObject(context.Application[s.ToString()]);
                }
            }

            if (context.Request.ContentType.ToLower().IndexOf("/json") > 0)
            {
                var sr  = new StreamReader(context.Request.InputStream);
                var str = sr.ReadToEnd();
                if (!string.IsNullOrEmpty(str))
                {
                    FrameDLRObject o = null;
                    FrameDLRObject.TryParse(str, FrameDLRFlags.SensitiveCase, out o);
                    if (o != null)
                    {
                        foreach (var k in o.Keys)
                        {
                            p[DomainKey.POST_DATA, k] = o.GetValue(k);
                        }
                    }
                }
                p.RequestContent = str;
            }
            //xml
            if (context.Request.ContentType.ToLower().IndexOf("/xml") > 0)
            {
                var sr  = new StreamReader(context.Request.InputStream);
                var str = sr.ReadToEnd();
                if (!string.IsNullOrEmpty(str))
                {
                    FrameDLRObject o = FrameDLRObject.CreateInstance(str, FrameDLRFlags.SensitiveCase);
                    if (o != null)
                    {
                        foreach (var k in o.Keys)
                        {
                            p[DomainKey.POST_DATA, k] = o.GetValue(k);
                        }
                    }
                }
                p.RequestContent = str;
            }
            //multipart/form-data
            if (context.Request.ContentType.ToLower().IndexOf("multipart/form-data") >= 0)
            {
                var mp = ParseMultipartFormData(context.Request.InputStream, context.Request.ContentEncoding);
                foreach (var k in mp.Keys)
                {
                    if (mp.GetValue(k) is FrameUploadFile)
                    {
                        p[DomainKey.UPDATE_FILE, k] = mp.GetValue(k);
                    }
                    else
                    {
                        p[DomainKey.POST_DATA, k] = mp.GetValue(k);
                    }
                }
            }

            p.ExtentionObj.cookie = FrameDLRObject.CreateInstance();
            if (context.Request.Cookies != null && context.Request.Cookies.Count > 0)
            {
                foreach (var key in context.Request.Cookies.AllKeys)
                {
                    if (key != "ASP.NET_SessionId")
                    {
                        FrameDLRObject item = FrameDLRObject.CreateInstance();
                        item.SetValue("name", context.Request.Cookies[key].Name);
                        item.SetValue("value", context.Request.Cookies[key].Value);
                        item.SetValue("domain", context.Request.Cookies[key].Domain);
                        item.SetValue("expire", context.Request.Cookies[key].Expires);

                        ((FrameDLRObject)p.ExtentionObj.cookie).SetValue(ComFunc.nvl(item.GetValue("name")), item);
                    }
                }
            }

            p[DomainKey.SESSION, "SessionID"] = context.IsWebSocketRequest ? context.Request.Params["ASP.NET_SessionId"] : context.Session.SessionID;
            p.SetValue(DomainKey.APPLICATION_ENVIRONMENT, "ServerRootPath", context.Server.MapPath("~"));
            p.SetValue(DomainKey.APPLICATION_ENVIRONMENT, "ServerRootPath_URL", context.Request.Url.AbsoluteUri.Replace(context.Request.FilePath, ""));
            p.SetValue(DomainKey.APPLICATION_ENVIRONMENT, "WebPath", context.Request.Url.AbsoluteUri.Replace(context.Request.RawUrl, ""));
            p.SetValue(DomainKey.APPLICATION_ENVIRONMENT, "Domain", context.Request.Url.Host);
        }
Example #4
0
        public bool TryParseJSON(object obj)
        {
            dynamic dobj = null;

            if (obj is string)
            {
                dobj = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase);
                FrameDLRObject.TryParse(ComFunc.nvlNotrim(obj), FrameDLRFlags.SensitiveCase, dobj);
                if (dobj == null)
                {
                    return(false);
                }
            }
            else if (obj is FrameDLRObject)
            {
                dobj = (FrameDLRObject)obj;
            }
            else
            {
                return(false);
            }

            if (dobj.content == null ||
                dobj.content_by_url == null ||
                dobj.wild_cards_map == null)
            {
                return(false);
            }

            if (dobj.content is FrameDLRObject)
            {
                var content = (FrameDLRObject)dobj.content;
                foreach (var k in content.Keys)
                {
                    var entity = new ActionEntity();
                    if (entity.TryParseJSON(content.GetValue(k)))
                    {
                        _d.Add(k, entity);
                    }
                }
            }
            if (dobj.content_by_url is FrameDLRObject)
            {
                var content_by_url = (FrameDLRObject)dobj.content_by_url;
                foreach (var k in content_by_url.Keys)
                {
                    var entity = new ActionEntity();
                    if (entity.TryParseJSON(content_by_url.GetValue(k)))
                    {
                        _dbyurl.Add(k, entity);
                    }
                }
            }
            if (dobj.wild_cards_map is FrameDLRObject)
            {
                var wild_cards_map = (FrameDLRObject)dobj.wild_cards_map;
                foreach (var k in wild_cards_map.Keys)
                {
                    _wildcardsmap.Add(k, ComFunc.nvl(wild_cards_map.GetValue(k)));
                }
            }

            return(true);
        }
        /// <summary>
        /// 读取request中的参数写入RestParameter中
        /// </summary>
        /// <param name="request"></param>
        /// <param name="rp"></param>
        public static void LoadEFFCParameters(this HttpRequest request, ref RestParameter rp)
        {
            if (rp == null)
            {
                rp = new RestParameter();
            }
            rp.MethodName = request.Method.ToLower();
            var contenttype = ComFunc.nvl(request.ContentType).ToLower();

            contenttype = contenttype == "" ? "text/plain" : contenttype;
            foreach (var item in request.Query)
            {
                rp[DomainKey.QUERY_STRING, item.Key] = item.Value.ToString();
            }
            GlobalCommon.Logger.WriteLog(LoggerLevel.DEBUG, $"request contenttype:{contenttype}");
            if (request.Method.ToLower() == "post" ||
                request.Method.ToLower() == "put" ||
                request.Method.ToLower() == "patch" ||
                request.Method.ToLower() == "delete")
            {
                using (var stream = new MemoryStream())
                {
                    request.Body.CopyTo(stream);
                    stream.Seek(0, SeekOrigin.Begin);
                    if (contenttype.IndexOf("/json") > 0)
                    {
                        var sr  = new StreamReader(stream);
                        var str = sr.ReadToEnd();
                        GlobalCommon.Logger.WriteLog(LoggerLevel.DEBUG, $"request content:{str}");
                        if (!string.IsNullOrEmpty(str))
                        {
                            FrameDLRObject o = null;
                            FrameDLRObject.TryParse(str, FrameDLRFlags.SensitiveCase, out o);
                            if (o != null)
                            {
                                foreach (var k in o.Keys)
                                {
                                    rp[DomainKey.POST_DATA, k] = o.GetValue(k);
                                }
                            }
                        }
                        rp.RequestContent = str;
                    }
                    //xml
                    if (contenttype.IndexOf("/xml") > 0)
                    {
                        var sr  = new StreamReader(stream);
                        var str = sr.ReadToEnd();
                        GlobalCommon.Logger.WriteLog(LoggerLevel.DEBUG, $"request content:{str}");
                        if (!string.IsNullOrEmpty(str))
                        {
                            FrameDLRObject o = FrameDLRObject.CreateInstance(str, FrameDLRFlags.SensitiveCase);
                            if (o != null)
                            {
                                foreach (var k in o.Keys)
                                {
                                    rp[DomainKey.POST_DATA, k] = o.GetValue(k);
                                }
                            }
                        }
                        rp.RequestContent = str;
                    }
                    //multipart/form-data
                    if (contenttype.IndexOf("multipart/form-data") >= 0)
                    {
                        var mp = ParseMultipartFormData(stream, Encoding.UTF8);
                        stream.Seek(0, SeekOrigin.Begin);
                        GlobalCommon.Logger.WriteLog(LoggerLevel.DEBUG, $"request content:{new StreamReader(stream).ReadToEnd()}");
                        foreach (var k in mp.Keys)
                        {
                            if (mp.GetValue(k) is FrameUploadFile)
                            {
                                rp[DomainKey.UPDATE_FILE, k] = mp.GetValue(k);
                            }
                            else
                            {
                                rp[DomainKey.POST_DATA, k] = mp.GetValue(k);
                            }
                        }
                    }

                    if (contenttype.StartsWith("text/"))
                    {
                        var sr  = new StreamReader(stream);
                        var str = sr.ReadToEnd();
                        GlobalCommon.Logger.WriteLog(LoggerLevel.DEBUG, $"request content:{str}");
                        if (!string.IsNullOrEmpty(str))
                        {
                            var sarr = QueryHelpers.ParseQuery(str);
                            if (sarr != null)
                            {
                                foreach (var k in sarr)
                                {
                                    rp[DomainKey.POST_DATA, k.Key] = k.Value.ToString();
                                }
                            }
                        }
                    }

                    if (contenttype.IndexOf("application/x-www-form-urlencoded") >= 0)
                    {
                        var sr  = new StreamReader(stream);
                        var str = sr.ReadToEnd();
                        GlobalCommon.Logger.WriteLog(LoggerLevel.DEBUG, $"request content:{str}");
                        if (!string.IsNullOrEmpty(str))
                        {
                            var arrstr = str.Split('&');
                            if (arrstr != null)
                            {
                                foreach (var s in arrstr)
                                {
                                    var items = s.Split('=');
                                    if (items != null && items.Length > 0)
                                    {
                                        rp[DomainKey.POST_DATA, items[0]] = items.Length > 1 ? ComFunc.UrlDecode(items[1]) : "";
                                    }
                                }
                            }
                        }
                        rp.RequestContent = str;
                    }
                }
            }
        }