using BP.DA; using BP.En; using BP.Sys; using BP.Web; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using BP.Difference; using System.Collections; namespace BP.Tools { public class PubGlo { #region 表达式替换 /// /// 表达式替换 /// /// /// /// public static string DealExp(string exp, Entity en) { //替换字符 exp = exp.Replace("~", "'"); if (exp.Contains("@") == false) return exp; //首先替换加; 的。 exp = exp.Replace("@WebUser.No;", WebUser.No); exp = exp.Replace("@WebUser.Name;", WebUser.Name); exp = exp.Replace("@WebUser.FK_DeptName;", WebUser.FK_DeptName); exp = exp.Replace("@WebUser.FK_Dept;", WebUser.FK_Dept); // 替换没有 ; 的 . exp = exp.Replace("@WebUser.No", WebUser.No); exp = exp.Replace("@WebUser.Name", WebUser.Name); exp = exp.Replace("@WebUser.FK_DeptName", WebUser.FK_DeptName); exp = exp.Replace("@WebUser.FK_Dept", WebUser.FK_Dept); if (exp.Contains("@") == false) return exp; //增加对新规则的支持. @MyField; 格式. if (en != null) { Attrs attrs = en.EnMap.Attrs; Row row = en.Row; //特殊判断. if (row.ContainsKey("OID") == true) exp = exp.Replace("@WorkID", row["OID"].ToString()); if (exp.Contains("@") == false) return exp; foreach (string key in row.Keys) { //值为空或者null不替换 if (row[key] == null || row[key].Equals("") == true) continue; if (exp.Contains("@" + key)) { Attr attr = attrs.GetAttrByKeyOfEn(key); //是枚举或者外键替换成文本 if (attr.MyFieldType == FieldType.Enum || attr.MyFieldType == FieldType.PKEnum || attr.MyFieldType == FieldType.FK || attr.MyFieldType == FieldType.PKFK) { exp = exp.Replace("@" + key, row[key + "Text"].ToString()); } else { if (attr.MyDataType == DataType.AppString && attr.UIContralType == UIContralType.DDL && attr.MyFieldType == FieldType.Normal) exp = exp.Replace("@" + key, row[key + "T"].ToString()); else exp = exp.Replace("@" + key, row[key].ToString()); ; } } //不包含@则返回SQL语句 if (exp.Contains("@") == false) return exp; } } if (exp.Contains("@") && BP.Difference.SystemConfig.IsBSsystem == true) { /*如果是bs*/ foreach (string key in HttpContextHelper.RequestParamKeys) { if (string.IsNullOrEmpty(key)) continue; exp = exp.Replace("@" + key, HttpContextHelper.RequestParams(key)); } } exp = exp.Replace("~", "'"); return exp; } #endregion 表达式替换 #region http请求 /// /// Http Get请求 /// /// /// public static string HttpGet(string url) { try { HttpWebRequest request; // 创建一个HTTP请求 request = (HttpWebRequest)WebRequest.Create(url); // request.Method="get"; HttpWebResponse response; response = (HttpWebResponse)request.GetResponse(); System.IO.StreamReader myreader = new System.IO.StreamReader(response.GetResponseStream(), Encoding.UTF8); string responseText = myreader.ReadToEnd(); myreader.Close(); response.Close(); return responseText; } catch (Exception ex) { //url请求失败 return ex.Message; } } public static string HttpPostConnect_Data(string dbSrNo, string exp, Hashtable ht, string requestMethod) { //返回值 //用户输入的webAPI地址 string apiUrl = exp; if (apiUrl.Contains("@WebApiHost"))//可以替换配置文件中配置的webapi地址 apiUrl = apiUrl.Replace("@WebApiHost", BP.Difference.SystemConfig.AppSettings["WebApiHost"]); var mysrc = new SFDBSrc(dbSrNo); //拼接路径. apiUrl = mysrc.ConnString + apiUrl; #region 解析路径变量 /{xxx}/{yyy} ? xxx=xxx if (apiUrl.Contains("{") == true) { if (ht != null) { foreach (string key in ht.Keys) { apiUrl = apiUrl.Replace("{" + key + "}", ht[key].ToString()); } } } #endregion string[] strs = apiUrl.Split('?'); //api接口地址 string apiHost = strs[0]; //api参数 string apiParams = ""; if (strs.Length == 2) apiParams = strs[1]; return BP.Tools.PubGlo.HttpPostConnect(apiHost, apiParams, requestMethod); } /// /// httppost方式发送数据 /// /// 要提交的url /// /// 超时时间 /// text code. /// 成功:返回读取内容;失败:0 public static string HttpPostConnect(string serverUrl, string postData, string requestMethod = "POST") { //serverUrl = serverUrl.Replace("//", "/"); //serverUrl = serverUrl.Replace("//", "/"); var dataArray = Encoding.UTF8.GetBytes(postData); //创建请求 var request = (HttpWebRequest)HttpWebRequest.Create(serverUrl); request.Method = requestMethod; request.ContentLength = dataArray.Length; //设置上传服务的数据格式 设置之后不好使 //request.ContentType = "application/x-www-form-urlencoded"; //请求的身份验证信息为默认 request.Credentials = CredentialCache.DefaultCredentials; request.ContentType = "application/x-www-form-urlencoded"; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; //请求超时时间 request.Timeout = 10000; //创建输入流 Stream dataStream; if(requestMethod.ToLower() != "get") { try { dataStream = request.GetRequestStream(); //发送请求 dataStream.Write(dataArray, 0, dataArray.Length); dataStream.Close(); } catch (Exception) { return "0";//连接服务器失败 } } HttpWebResponse res; try { res = (HttpWebResponse)request.GetResponse(); } catch (WebException ex) { res = (HttpWebResponse)ex.Response; } StreamReader sr = new StreamReader(res.GetResponseStream(), Encoding.UTF8); //读取返回消息 string data = sr.ReadToEnd(); sr.Close(); return data; } } #endregion http请求 }