Example #1
0
        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);
            }
        }
Example #2
0
        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());
        }