//protected void addTokenToPars(ref JsonRequestHistorian oJson)
        //{
        //    if (Request != null && 
        //        Request.Headers != null && 
        //        Request.Headers.Authorization != null) {

        //        string token = Request.Headers.Authorization.Scheme;
        //        oJson.token= token;
        //    }
        //}

        protected void addIPToPars(ref JsonRequestDb oJson)
        {
            if (oJson.pars == null) oJson.pars = new Dictionary<string, string>();
            if (((HttpRequestMessage)Request).Properties.ContainsKey("MS_HttpContext"))
            {
                oJson.pars.Add("ip", ((System.Web.HttpContextWrapper)((HttpRequestMessage)Request).Properties["MS_HttpContext"]).Request.UserHostAddress);
            }
            else
            {
                oJson.pars.Add("ip", (Request.GetOwinContext() == null ? "na" : Request.GetOwinContext().Request.RemoteIpAddress));
            }
        }
        public DataTable KendoPost([FromBody]JsonRequestKendoDatasource value) {
            JsonRequestDb oJson=new JsonRequestDb();
            oJson.pars = new Dictionary<string, string>();

            // hozzáadom az oJson-hoz a pars objektumot
            if (value.pars != null && value.pars.Count != 0) {
                foreach (KeyValuePair<string,string> par in value.pars) {
                    oJson.pars.Add(par.Key, par.Value);
                }
            }
            // hozzáadom az oJson-hoz az extraPars objektumot (ez a máshova nem tartozó paraméterek listája)
            if (value.extraPars != null && value.extraPars.Count !=0) {
                foreach (KeyValuePair<string, string> par in value.extraPars) {
                    if (oJson.pars.ContainsKey(par.Key)) {
                        throw new ApplicationException($"A paraméter ({par.Key}) a par objektumban és a szülő objektumban is létezik.");
                    }
                    oJson.pars.Add(par.Key, par.Value);
                }
            }

            addTokenToPars(oJson);
            using (_sql = new Sql(getConnectionString(value.db), BaseApiController.logInfoFactory())) {
                Dictionary<string, string> pars = oJson.pars;
                try {
                    if (value.log == null || !value.log.enabled) _sql.logger.DisabledOnce();
                    using (DataTable dt = _sql.spExecuters[value.action](ref pars)) {
                        if (dt !=null && dt.Rows.Count > 0) return dt;
                        // az update, create esetén vissza kell adni a megkapott értékeket
                        if (dt != null) {
                            var row = dt.NewRow();
                            foreach (DataColumn col in dt.Columns) {
                                if (oJson.pars.ContainsKey(col.ColumnName)) row[col.ColumnName] = oJson.pars[col.ColumnName];
                            }
                            dt.Rows.Add(row);
                        }
                        return dt;
                    }
                } catch (SqlException ex) {
                    if (ex.State == (byte) Sql.stateNumber.NoPrivilege) {
                        var errorResponse = Request.CreateErrorResponse(System.Net.HttpStatusCode.Unauthorized, "Ehhez a művelethez nincs jogosultságod. Jelentkezz be és próbáld újra");
                        throw new HttpResponseException(errorResponse);
                    }
                    throw;
                }
            }
        }