/// <summary> /// Executes post requests /// </summary> /// <param name="json">Requst Json</param> /// <param name="method">Action Methods Method to send Json to </param> /// <returns></returns> public static async Task <RequestResponse> GetResponseAsync(string json, ActionEnum method) { string transportUrl = Url.TransportUrl(method, Instance.domain); HttpStatusCode Code; RequestResponse result = new RequestResponse(); HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(transportUrl); myHttpWebRequest.Method = "POST"; myHttpWebRequest.ContentType = "application/json"; myHttpWebRequest.CookieContainer = Instance.Auth; Uri siteUri = new Uri(transportUrl); foreach (Cookie cookie in Instance.Auth.GetCookies(siteUri)) { if (cookie.Name == "BPMCSRF" || cookie.Name == "BPMSESSIONID") { myHttpWebRequest.Headers.Add(cookie.Name, cookie.Value); } } //encode json byte[] postBytes = Encoding.UTF8.GetBytes(json); //Prepare Request Stream using (Stream requestStream = myHttpWebRequest.GetRequestStream()) { requestStream.Write(postBytes, 0, postBytes.Length); } //Send Request try { using (HttpWebResponse myHttpWebResponse = (HttpWebResponse)await myHttpWebRequest.GetResponseAsync().ConfigureAwait(false)) { Code = myHttpWebResponse.StatusCode; /*** * !!! VERY IMPORTANT !!! * READ: https://academy.bpmonline.com/documents/technic-sdk/7-14/executing-odata-queries-using-fiddler * User session is created only upon the first request to the EntityDataService.svc, after which the BPMSESSIONID cookie will be returned in the response. * Therefore, there is no need to add BPMSESSIONID cookie to the title of the first request. * If you do not add BPMSESSIONID cookie to each subseqnent request, then each request will create a new user session. * Significant frequency of requests (several or more requests a minute) will increase the RAM consumption which will decrease performance. */ if (Instance.BpmSessionId == false) { //Auth.Add(myHttpWebResponse.Cookies); string val = myHttpWebResponse.Cookies["BPMSESSIONID"].Value; Cookie C = new Cookie("BPMSESSIONID", val); Instance.Auth.Add(new Uri(Instance.domain), C); Instance.BpmSessionId = true; } using (StreamReader MyStreamReader = new StreamReader(myHttpWebResponse.GetResponseStream(), true)) { result.HttpStatusCode = Code; result.Result = MyStreamReader.ReadToEnd(); result.ErrorMessage = null; } } } catch (WebException we) { Code = ((HttpWebResponse)(we).Response).StatusCode; using (StreamReader MyStreamReader = new StreamReader(((HttpWebResponse)(we).Response).GetResponseStream(), true)) { result.HttpStatusCode = Code; result.Result = null; result.ErrorMessage = MyStreamReader.ReadToEnd(); } } return(result); }
/// <summary> /// Returns object containing Base64 encoded Images. /// </summary> /// <param name="id">Id of the Image in SysImage Table</param> /// <returns>Base64 encoded image or error message</returns> public async Task <RequestResponse> GetImageAsync(string id) { string transportUrl = Url.TransportUrl(ActionEnum.SYSIMAGE, Instance.domain) + id; HttpStatusCode Code; HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(transportUrl); myHttpWebRequest.Method = "GET"; myHttpWebRequest.ContentType = "application/octet-stream"; myHttpWebRequest.CookieContainer = Auth; Uri siteUri = new Uri(transportUrl); foreach (Cookie cookie in Auth.GetCookies(siteUri)) { if (cookie.Name == "BPMCSRF" || cookie.Name == "BPMSESSIONID") { myHttpWebRequest.Headers.Add(cookie.Name, cookie.Value); } } //Send Request try { using (HttpWebResponse myHttpWebResponse = (HttpWebResponse)await myHttpWebRequest.GetResponseAsync().ConfigureAwait(false)) { Code = myHttpWebResponse.StatusCode; if (Instance.BpmSessionId == false) { string val = myHttpWebResponse.Cookies["BPMSESSIONID"].Value; Cookie C = new Cookie("BPMSESSIONID", val); Auth.Add(new Uri(Instance.domain), C); Instance.BpmSessionId = true; } using (Stream myStream = myHttpWebResponse.GetResponseStream()) { //Stream str = myHttpWebResponse.GetResponseStream(); byte[] inBuf = new byte[myHttpWebResponse.ContentLength]; int bytesToRead = (int)inBuf.Length; int bytesRead = 0; while (bytesToRead > 0) { int n = myStream.Read(inBuf, bytesRead, bytesToRead); if (n == 0) { break; } bytesRead += n; bytesToRead -= n; } string PhotoData = Convert.ToBase64String(inBuf); myStream.Close(); myStream.Dispose(); RequestResponse ir = new RequestResponse() { HttpStatusCode = Code, Result = PhotoData, ErrorMessage = null }; return(ir); } } } catch (WebException we) { Code = ((HttpWebResponse)(we).Response).StatusCode; using (StreamReader MyStreamReader = new StreamReader(((HttpWebResponse)(we).Response).GetResponseStream(), true)) { return(new RequestResponse() { HttpStatusCode = Code, Result = null, ErrorMessage = MyStreamReader.ReadToEnd() }); } } }