public FileContentResult ImageEditRequest([FromBody] string RequestData) { //map request to DTO RequestModel JObject model = new JObject(); try { model = JObject.Parse(RequestData); } catch (Exception ex) { Console.Out.WriteLine(ex.ToString()); } RequestModel request = new RequestModel(); try { request.ImageData = model["ImageData"].ToString(); request.Operations = model["Operations"].ToObject <List <JObject> >(); } catch (Exception ex) { throw new SystemException("Invalid String", ex); } //create data stream var imageDataByteArray = Convert.FromBase64String(request.ImageData); var imageDataStream = new MemoryStream(imageDataByteArray); imageDataStream.Position = 0; //Save edited image result here var imageOutStream = new MemoryStream(); ImageFactory imageFactory = new ImageFactory(); imageFactory.Load(imageDataStream); foreach (JObject JOp in request.Operations) { if (JOp.ContainsKey("Resize")) { var JTemp = JOp["Resize"]; Resize resize = JTemp.ToObject <Resize>(); resize.PerformAction(imageFactory); } else if (JOp.ContainsKey("Filter")) { var JTemp = JOp["Filter"]; Filter filter = JTemp.ToObject <Filter>(); filter.PerformAction(imageFactory); } else if (JOp.ContainsKey("Flip")) { var JTemp = JOp["Flip"]; Flip flip = JTemp.ToObject <Flip>(); flip.PerformAction(imageFactory); } else if (JOp.ContainsKey("RotateRight")) { var JTemp = JOp["RotateRight"]; RotateRight rotate = JTemp.ToObject <RotateRight>(); rotate.PerformAction(imageFactory); } else if (JOp.ContainsKey("RotateDegrees")) { var JTemp = JOp["RotateDegrees"]; RotateDegrees rotateDegrees = JTemp.ToObject <RotateDegrees>(); rotateDegrees.PerformAction(imageFactory); } else if (JOp.ContainsKey("Thumbnail")) { var JTemp = JOp["Thumbnail"]; Thumbnail thumbnail = JTemp.ToObject <Thumbnail>(); thumbnail.PerformAction(imageFactory); } } imageFactory.Save(imageOutStream); return(File(imageOutStream.ToArray(), "image/png")); }