protected TResponse PostPut <TResponse>(string url, string method, Dictionary <string, string> headers, object payload, IEnumerable <HttpStatusCode> expectedStatusCodes) { var request = CreateRequest(url, method, headers, payload); var response = _httpHandler.HandleRequest(request); ProcessResponse(response, expectedStatusCodes ?? new [] { HttpStatusCode.OK }); return(UnwrapResponse <TResponse>(response)); }
public void Execute() { Action action = () => { handler.SetBeginTimestamp(beginTime); handler.HandleRequest(context.Request, context.Response); }; HandleRequestWithinExceptionHandler(action, context.Response); }
public void Do(object state) { HttpData ctx = (HttpData)state; try { IHttpHandler clonedHandler = (IHttpHandler)this.handler.Clone(); clonedHandler.SetBeginTimestamp(ctx.BeginTime); clonedHandler.HandleRequest(ctx.Context.Request, ctx.Context.Response); } catch (Cloud.WammerCloudException e) { // cannot connect to Waveface cloud if (e.HttpError != WebExceptionStatus.ProtocolError) { HttpHelper.RespondFailure(ctx.Context.Response, new WammerStationException(e.InnerException.Message, (int)StationApiError.ConnectToCloudError), (int)HttpStatusCode.BadRequest); logger.Warn("Connection to cloud error", e); return; } // if cloud returns bad request error, bypass it to client WebException webex = (WebException)e.InnerException; if (webex != null) { HttpWebResponse webres = (HttpWebResponse)webex.Response; if (webres != null) { if (webres.StatusCode == HttpStatusCode.BadRequest) { Cloud.CloudResponse cloudres = fastJSON.JSON.Instance.ToObject <Cloud.CloudResponse>(e.response); HttpHelper.RespondFailure(ctx.Context.Response, cloudres); logger.Warn("Connection to cloud error", e); return; } HttpHelper.RespondFailure(ctx.Context.Response, new WammerStationException(e.InnerException.Message, e.WammerError), (int)webres.StatusCode); logger.Warn("Connecting to cloud error", e); return; } } HttpHelper.RespondFailure(ctx.Context.Response, new WammerStationException(e.Message, e.WammerError), (int)HttpStatusCode.BadRequest); logger.Warn("Connecting to cloud error", e); } catch (ServiceUnavailableException e) { HttpHelper.RespondFailure(ctx.Context.Response, e, (int)HttpStatusCode.ServiceUnavailable); logger.Warn("Service unavailable", e); } catch (WammerStationException e) { HttpHelper.RespondFailure(ctx.Context.Response, e, (int)HttpStatusCode.BadRequest); logger.Warn("Http handler error", e); } catch (FormatException e) { HttpHelper.RespondFailure(ctx.Context.Response, e, (int)HttpStatusCode.BadRequest); logger.Warn("Request format is incorrect", e); } catch (WebException webex) { Wammer.Cloud.WammerCloudException ex = new Cloud.WammerCloudException("Request to cloud failed", webex); HttpHelper.RespondFailure(ctx.Context.Response, webex, (int)HttpStatusCode.InternalServerError); logger.Warn("Connecting to cloud error", ex); } catch (Exception e) { HttpHelper.RespondFailure(ctx.Context.Response, e, (int)HttpStatusCode.InternalServerError); logger.Warn("Internal server error", e); } }