public async Task <IActionResult> ChartAsync(string formula = "sin(x)", string from = "-40", string to = "40", string n = "500") { var klient = new HttpClient(); HttpResponseMessage response = klient.GetAsync("http://localhost:5420/api/calculate/xy?formula=" + formula + "&from=" + from + "+&to=" + to + "+&n=" + n + "").Result; var jsonstr = await response.Content.ReadAsStringAsync(); if (response.StatusCode == HttpStatusCode.OK) { //Console.WriteLine(jsonstr); var jsonobj2 = JsonSerializer.Deserialize <responseXYRange>(jsonstr); //var jsonobj = JsonConvert.DeserializeObject<RPNWebAppMVC.Models.responseXYRange>(jsonstr); responseXYRange myres = (responseXYRange)jsonobj2; ViewBag.arr = new String[] { formula, from, to, n }; //ViewBag.arr = jsonobj.result; //Console.WriteLine(response.ToString()); return(View(myres)); } return(View(new ErrorViewModel())); }
public IActionResult Get(string formula, string from, string to, string n) { string message = ""; if (String.IsNullOrEmpty(formula) || String.IsNullOrEmpty(from) || String.IsNullOrEmpty(to) || String.IsNullOrEmpty(n)) { message = "wrong url"; goto end; } double fromDouble = 0; double toDouble = 0; int nInt = 0; try { fromDouble = double.Parse(from.Replace('.', ',')); toDouble = double.Parse(to.Replace('.', ',')); nInt = int.Parse(n); } catch (Exception ex) { message = ex.Message; goto end; } if (nInt > 1000) { goto end; } RPN myRPN = new RPN(formula); if (!myRPN.properEquation()) { message = "invalid formula"; goto end; } try { myRPN.generateInfixTokens(); } catch (Exception ex) { message = (ex.Message); goto end; } if (myRPN.invalidTokens) { message = "invalid tokens"; goto end; } myRPN.generatePostfixTokens(); try { List <string> results = myRPN.evaluatePostfix(fromDouble, toDouble, nInt); if (myRPN.evalError == false) { List <xy> pairs = new List <xy>(); for (int i = 0; i < results.Count; i++) { string[] delimitedParts = results[i].Split('#'); pairs.Add(new xy { x = double.Parse(delimitedParts[0]), y = double.Parse(delimitedParts[1]) }); } responseXYRange returnResponseXYRange = new responseXYRange(); returnResponseXYRange.status = "ok"; returnResponseXYRange.result = pairs.ToArray(); return(Ok(returnResponseXYRange)); } else { List <xyErrors> pairs = new List <xyErrors>(); for (int i = 0; i < results.Count; i++) { string[] delimitedParts = results[i].Split('#'); if (double.TryParse(delimitedParts[1], out double parsed)) { pairs.Add(new xyErrors { x = double.Parse(delimitedParts[0]), y = parsed }); } else { pairs.Add(new xyErrors { x = double.Parse(delimitedParts[0]), error = delimitedParts[1] }); } } responseXYRangeError errorPairs = new responseXYRangeError(); errorPairs.status = "error"; errorPairs.result = pairs.ToArray(); return(StatusCode(222, errorPairs)); } } catch (Exception ex) { message = ex.Message; goto end; } end: responseError responseError = new responseError(); responseError.status = "error"; responseError.result = message; return(BadRequest(responseError)); }