/// <summary> /// Populates the remote body from context. /// </summary> /// <param name="incomingHttpContext">The incoming HTTP context.</param> /// <param name="remoteWebRequest">The remote web request.</param> /// <returns> /// Returns a <see cref="ProxyHandler.WebResponseResult"/> containing the HTTP response and status. /// </returns> private async Task <WebResponseResult> PopulateRemoteBodyFromContext( IStumpsHttpContext incomingHttpContext, HttpWebRequest remoteWebRequest) { var result = new WebResponseResult { Success = true }; try { if (incomingHttpContext.Request.BodyLength > 0) { remoteWebRequest.ContentLength = incomingHttpContext.Request.BodyLength; var requestStream = await remoteWebRequest.GetRequestStreamAsync(); await requestStream.WriteAsync(incomingHttpContext.Request.GetBody(), 0, incomingHttpContext.Request.BodyLength); } } catch (WebException wex) { if (wex.Response != null) { result.Response = (HttpWebResponse)wex.Response; } else { result.Success = false; } } return(result); }
private async Task ExecuteRemoteWebRequest(HttpWebRequest remoteWebRequest, WebResponseResult remoteWebResponseResult) { remoteWebResponseResult.Success = true; try { var webResponse = await remoteWebRequest.GetResponseAsync(); remoteWebResponseResult.Response = (HttpWebResponse)webResponse; } catch (WebException wex) { if (wex.Response != null) { remoteWebResponseResult.Response = (HttpWebResponse)wex.Response; } else { remoteWebResponseResult.Success = false; } } catch (Exception) { remoteWebResponseResult.Success = false; } }
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) { var skip = actionExecutedContext.ActionContext.ActionDescriptor.GetCustomAttributes <AllowSkipAttribute>(); if (skip != null && skip.Count > 0) { return; } WebResponseResult <object> result = null; if (actionExecutedContext.Exception == null) { if (!actionExecutedContext.ActionContext.Response.IsSuccessStatusCode) { result = new WebResponseResult <object>() { IsSuccess = false, Code = actionExecutedContext.Response.StatusCode.ToString(), ErrorInfo = actionExecutedContext.Exception.Message }; actionExecutedContext.Response = new HttpResponseMessage() { Content = new StringContent(result.ToJson(), Encoding.UTF8, "application/json") }; } else { result = actionExecutedContext.ActionContext.Response.Content == null || actionExecutedContext.ActionContext.Response.Content.ReadAsAsync <object>().IsFaulted ? new WebResponseResult <object>() : new WebResponseResult <object>(actionExecutedContext.ActionContext.Response.Content.ReadAsAsync <object>()); } } if (result != null) { actionExecutedContext.Response = new HttpResponseMessage { Content = new StringContent(result.ToJson(), Encoding.GetEncoding("UTF-8"), "application/json") }; } }