public override void ProcessRequest(HttpContext context) { if (this.AjaxEnabled && !string.IsNullOrWhiteSpace(this.AjaxKey)) { var tryToCallAjax = context.Request.Form.AllKeys.Contains(this.AjaxKey) || context.Request.QueryString.AllKeys.Contains(this.AjaxKey); if (tryToCallAjax) { var ajaxMethod = (context.Request[this.AjaxKey] ?? string.Empty).Trim(); if (string.IsNullOrWhiteSpace(ajaxMethod)) { context.WriteError("try to call an ajax method, but didn't pass a method name."); return; } var method = this.GetType().GetMethod(ajaxMethod); if (method == null) { context.WriteError(string.Format("no operatoin like \"{0}\" exists", ajaxMethod)); return; } var validators = method.GetCustomAttributes(typeof(HttpValidationAttribute), true) as HttpValidationAttribute[]; if (validators != null && validators.Any()) { foreach (var v in validators) { try { v.Validate(); } catch (InvalidRequestException e) { context.WriteError(e.Message); return; } } } try { var result = method.Invoke(this, null); context.WriteOk(result); } catch (Exception e) { context.WriteError(e.InnerException.Message); } return; } } base.ProcessRequest(context); }