/// <summary> /// 通过实现 System.Web.IHttpHandler 接口的自定义 HttpHandler 启用 HTTP Web 请求的处理。 /// </summary> /// <param name="context">它提供对用于为 HTTP 请求提供服务的内部服务器对象(如 Request、Response、Session和 Server)的引用。</param> public void ProcessRequest(HttpContext context) { WebRequestDecoder webRequestDecoder = WebRequestDecoder.CreateInstance(context); if (webRequestDecoder == null) { webRequestDecoder = new SimpleUrlDecoder(context); } string logicalMethod = webRequestDecoder.LogicalMethod; ResponseAnnotationAttribute methodAnnotation = this.GetMethodAnnotation(logicalMethod); WebResponseEncoder webResponseEncoder = WebResponseEncoder.CreateInstance(context, methodAnnotation.ResponseFormat); if (webResponseEncoder == null) { webResponseEncoder = new JQueryScriptEncoder(context); } try { this.Pre_Invoke(context); object srcObj = this.InvokeMethod(logicalMethod, webRequestDecoder.Deserialize()); webResponseEncoder.Write(srcObj); } catch (Exception ex) { string message = (ex.InnerException == null) ? ex.Message : ex.InnerException.Message; this.ResponseException(context, message, webResponseEncoder); } WebAjaxHandler.InitializeCachePolicy(context, methodAnnotation); }
/// <summary> /// 输出错误消息 /// </summary> /// <param name="context">当前上下文</param> /// <param name="message">消息</param> /// <param name="encoder">响应</param> private void ResponseException(HttpContext context, string message, WebResponseEncoder encoder) { HttpResponse response = context.Response; response.ClearContent(); response.StatusCode = 300; encoder.Write(message); }