public async Task RunWorkflow(int requestId) { var request = await _requestRepository.GetAsync(requestId); var order = await _orderRepository.GetAsync(request.OrderId); var workflow = JsonConvert.DeserializeObject <WorkflowJson>(request.WorkflowJson); foreach (var step in workflow.Steps) { WorkflowRequestStep httprequest = null; if (step.Type == "httprequest") { httprequest = ParseRequest(step.Request); httprequest.Url = ReplaceVariableNames(httprequest.Url); try { var result = await GetRequestResult(httprequest); resultVariables.Add(httprequest.ResultVariable, JsonConvert.DeserializeObject <dynamic>(result)); } catch (Exception e) { step.Error = e.Message; break; } } await UpdateRequest(request, workflow); } }
private async Task <string> GetRequestResult(WorkflowRequestStep request) { var http = new HttpClient(); foreach (var header in request.Headers) { http.DefaultRequestHeaders.Add(header.Name, header.Value); } var list = new List <string>(); foreach (var param in request.Params) { list.Add($"{param.Name}={param.Value}"); } var queryParameterString = "?" + string.Join('&', list); queryParameterString = queryParameterString != "?" ? queryParameterString : ""; StringContent content = null; if (request.Body.IsNullOrWhiteSpace()) { var body = JsonConvert.DeserializeObject(request.Body); content = new StringContent(JsonConvert.SerializeObject(body), Encoding.Default, "application/json"); } HttpResponseMessage result = null; switch (request.Method) { case "POST": result = await http.PostAsync(request.Url + queryParameterString, content); break; case "GET": result = await http.GetAsync(request.Url + queryParameterString); break; case "PUT": result = await http.PutAsync(request.Url + queryParameterString, content); break; case "DELETE": result = await http.DeleteAsync(request.Url + queryParameterString); break; default: break; } if (!result.IsSuccessStatusCode) { throw new Exception("Error: " + result.ReasonPhrase + ". Status Code: " + result.StatusCode); } return(await result.Content.ReadAsStringAsync()); }