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); }
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); }
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); }
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; } } } }