示例#1
0
        /// <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);
        }
示例#2
0
        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;
            }
        }
示例#3
0
        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")
                };
            }
        }