private void CustomResultHandler(MulticastDelegate resultHander, KApiResponse response) { var func = resultHander.Target as ScriptFunctionInstance; var result = func.Call(func, new[] { JsValue.FromObject(func.Engine, response.Code), JsValue.FromObject(func.Engine, response.Data) }).ToObject(); if (result != null) { _renderContext.Response.AppendString(Helpers.ToJson(result)); } }
void DefaultResultHandler(KApiResponse response) { _renderContext.Response.StatusCode = response.Code; _renderContext.SetItem(new CustomStatusCode() { IsCustomSet = true, Code = response.Code }); if (response.Code > 300 && response.Code <= 302) { _renderContext.Response.Redirect(302, response.Data); } else if (response.Data != null) { _renderContext.Response.AppendString(response.Data); } }
private void CallAction(MulticastDelegate action, string method, IDictionary <string, object>[] metas, MulticastDelegate resultHander) { if (_renderContext.Request.Method != method) { return; } KApiResponse response; try { metas = Helpers.NamedMetas(metas); var func = action.Target as ScriptFunctionInstance; var parameters = GetParameters(func, metas); var result = func.Call(func, parameters).ToObject(); if (result is KApiResponse) { response = result as KApiResponse; } else { var data = result == null ? null : Helpers.ToJson(result); response = new KApiResponse(200, data); } } catch (KApiException e) { response = new KApiResponse(400, e.Message); } catch (Exception e) { response = new KApiResponse(500, e.ToString()); } if (resultHander == null) { DefaultResultHandler(response); } else { CustomResultHandler(resultHander, response); } }