internal async Task ReloadData(Action <ExpandoObject> setParams, String json, TextWriter writer) { ExpandoObject dataToSave = JsonConvert.DeserializeObject <ExpandoObject>(json, new ExpandoObjectConverter()); String baseUrl = dataToSave.Get <String>("baseUrl"); // initial = [query, controller] ExpandoObject initialParams = new ExpandoObject(); if (baseUrl.Contains("?")) { var parts = baseUrl.Split('?'); baseUrl = parts[0]; // parts[1] contains query parameters var qryParamsColl = HttpUtility.ParseQueryString(parts[1]); initialParams.Append(CheckPeriod(qryParamsColl), toPascalCase: true); } setParams?.Invoke(initialParams); if (NormalizeBaseUrl != null) { baseUrl = NormalizeBaseUrl(baseUrl); } if (baseUrl == null) { throw new RequestModelException("There are not base url for command 'reload'"); } var rm = await RequestModel.CreateFromBaseUrl(_host, baseUrl); RequestView rw = rm.GetCurrentAction(); String loadProc = rw.LoadProcedure; if (loadProc == null) { throw new RequestModelException("The data model is empty"); } // realParams = [model.json, id, initial] var loadPrms = new ExpandoObject(); loadPrms.Append(rw.parameters); // model.json loadPrms.Set("Id", rw.Id); // id loadPrms.Append(initialParams); // initial ExpandoObject prms2 = loadPrms; if (rw.indirect) { // for indirect action - @UserId and @Id only prms2 = new ExpandoObject(); setParams?.Invoke(prms2); prms2.Set("Id", rw.Id); } IDataModel model = await _dbContext.LoadModelAsync(rw.CurrentSource, loadProc, prms2); if (rw.HasMerge) { AddMergeParameters(rw.merge, model, prms2); var mergeModel = await _dbContext.LoadModelAsync(rw.MergeSource, rw.MergeLoadProcedure, prms2); model.Merge(mergeModel); } rw = await LoadIndirect(rw, model, loadPrms); model.AddRuntimeProperties(); WriteDataModel(model, writer); }