using EasyBL.WebApi.Message; using Newtonsoft.Json; using System; using System.Data; using System.Linq; using System.Net.Http; using System.Reflection; using System.Text; using System.Web; using System.Web.Http; namespace EasyBL.WebApi.Models { public partial class CmdService : ApiServiceBase { static public string DecodeParm(string i_sEncodedData) { i_sEncodedData = i_sEncodedData.Replace(" ", "+"); var encodedDataAsBytes = Convert.FromBase64String(i_sEncodedData); var returnValue = ASCIIEncoding.ASCII.GetString(encodedDataAsBytes); return HttpUtility.UrlDecode(returnValue); } public HttpResponseMessage GetData([FromBody]dynamic i_value, bool i_bDecode, HttpRequestMessage i_rRequest) { string sRes = null; try { string value = (i_bDecode) ? DecodeParm(i_value) : null; sRes = ProgessJson(value, i_rRequest); } catch (Exception ex) { var exCur = ex; while (null != exCur.InnerException) { exCur = exCur.InnerException; } sRes = JsonConvert.SerializeObject(new ErrorResponseMessage(exCur.Message)); } return new HttpResponseMessage { Content = new StringContent(sRes, Encoding.UTF8, "application/json") }; } protected override string HandleRequest(RequestMessage i_joRequest, HttpRequestMessage i_rRequest) { var sRes = ""; try { do { if (i_joRequest == null || string.IsNullOrEmpty(i_joRequest.TYPE) || string.IsNullOrEmpty(i_joRequest.MODULE)) { sRes = MakeErrorReturn(i_joRequest, string.Format(BLWording.REQUEST_IS_NULL)); break; } var sModuleType = i_joRequest.CUSTOMDATA.ContainsKey("module_id") ? i_joRequest.CUSTOMDATA["module_id"] : ""; var sModuleName = i_joRequest.MODULE + "Service"; var sCreateError = GetInstByClassName(sModuleName, sModuleType, out object oModule); if (sCreateError != null || oModule == null) { sRes = MakeErrorReturn(i_joRequest, sCreateError); break; } if (!(oModule is ServiceBase bls)) { sRes = MakeErrorReturn(i_joRequest, BLWording.COVERT_FAIL); break; } sRes = MakeMessage(bls.Entry(i_joRequest)); } while (false); } catch (Exception e) { sRes = MakeErrorReturn(i_joRequest, e.Message); } if (string.IsNullOrWhiteSpace(sRes)) { sRes = MakeErrorReturn(i_joRequest, "Unknow Error"); } return sRes; } /// /// /// /// /// /// public static string GetInstByClassName(string i_sTypeName, string i_sModuleId, out object o_oRes) { object obj2 = null; string str = null; var typeByTypeName = GetTypeByTypeName(i_sTypeName, i_sModuleId); if (typeByTypeName == null) { str = "NO THIS ENTITY"; } else { obj2 = Activator.CreateInstance(typeByTypeName); if (obj2 == null) { str = "ENTITY CREATE FAIL"; } } o_oRes = obj2; return str; } /// /// /// /// /// public static Type GetTypeByTypeName(string i_sTypeName, string i_sModuleId)// { Type type = null; var codeBase = Assembly.GetExecutingAssembly().GetName().CodeBase; codeBase = codeBase.Substring(0, codeBase.LastIndexOf("/")); var assemblyArray = (from f in AppDomain.CurrentDomain.GetAssemblies() where !f.IsDynamic && f.CodeBase != null && f.CodeBase.StartsWith(codeBase, StringComparison.Ordinal) && f.IsDefined(typeof(AssemblyCompanyAttribute), false) && f.IsDefined(typeof(AssemblyDescriptionAttribute), false) && f.IsDefined(typeof(AssemblyProductAttribute), false) && f.GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false).OfType().FirstOrDefault().Description == "Service" && ((f.GetCustomAttributes(typeof(AssemblyProductAttribute), false).OfType().FirstOrDefault().Product.Equals(nameof(EasyBL))) || (f.GetCustomAttributes(typeof(AssemblyProductAttribute), false).OfType().FirstOrDefault().Product.Contains("EasyBL." + i_sModuleId.ToUpper()))) orderby f.GetCustomAttributes(typeof(AssemblyProductAttribute), false).OfType().FirstOrDefault().Product descending select f).ToArray(); // && f.GetCustomAttributes(typeof(AssemblyCompanyAttribute), // false).OfType().FirstOrDefault() != null && // f.GetCustomAttributes(typeof(AssemblyDescriptionAttribute), // false).OfType().FirstOrDefault() != null && // f.GetCustomAttributes(typeof(AssemblyProductAttribute), // false).OfType().FirstOrDefault() != null foreach (Assembly assembly2 in assemblyArray) { var typeArray = assembly2.GetTypes().Where(x => x.IsSubclassOf(typeof(ServiceBase))).ToArray(); foreach (Type classType in typeArray) { if (classType.IsClass && (classType.Name == i_sTypeName)) { type = classType; return type; } } } return type; } } }