Inheritance: System.Web.Hosting.SimpleWorkerRequest
示例#1
0
        public RequestResult ProcessRequest(string url, HttpVerbs httpVerb, NameValueCollection formValues, NameValueCollection headers)
        {
            if (url == null)
            {
                throw new ArgumentNullException("url");
            }

            if (httpVerb == HttpVerbs.Post && headers == null)
            {
                headers = new NameValueCollection();
                headers.Add("content-type", "application/x-www-form-urlencoded");
            }
            else if (httpVerb == HttpVerbs.Post && headers != null)
            {
                if (string.IsNullOrEmpty(headers["content-type"]))
                {
                    headers.Add("content-type", "application/x-www-form-urlencoded");
                }
            }

            // Fix up URLs that incorrectly start with / or ~/
            if (url.StartsWith("~/"))
            {
                url = url.Substring(2);
            }
            else if (url.StartsWith("/"))
            {
                url = url.Substring(1);
            }

            // Parse out the querystring if provided
            string query = "";
            int    querySeparatorIndex = url.IndexOf("?");

            if (querySeparatorIndex >= 0)
            {
                query = url.Substring(querySeparatorIndex + 1);
                url   = url.Substring(0, querySeparatorIndex);
            }

            // Perform the request
            LastRequestData.Reset();
            var    output        = new StringWriter();
            string httpVerbName  = httpVerb.ToString().ToLower();
            var    workerRequest = new SimulatedWorkerRequest(url, query, output, Cookies, httpVerbName, formValues, headers);

            HttpRuntime.ProcessRequest(workerRequest);

            // Capture the output
            AddAnyNewCookiesToCookieCollection();
            Session = LastRequestData.HttpSessionState;
            return(new RequestResult
            {
                ResponseText = output.ToString(),
                ActionExecutedContext = LastRequestData.ActionExecutedContext,
                ResultExecutedContext = LastRequestData.ResultExecutedContext,
                Response = LastRequestData.Response,
            });
        }
        private RequestResult ProcessRequest(string url, HttpVerbs httpVerb, byte[] bodyData, NameValueCollection headers)
        {
            if (url == null)
            {
                throw new ArgumentNullException("url");
            }

            // Fix up URLs that incorrectly start with / or ~/
            if (url.StartsWith("~/"))
            {
                url = url.Substring(2);
            }
            else if (url.StartsWith("/"))
            {
                url = url.Substring(1);
            }

            // Parse out the querystring if provided
            string query = "";
            int    querySeparatorIndex = url.IndexOf("?", StringComparison.Ordinal);

            if (querySeparatorIndex >= 0)
            {
                query = url.Substring(querySeparatorIndex + 1);
                url   = url.Substring(0, querySeparatorIndex);
            }

            // Perform the request
            LastRequestData.Reset();
            var    output        = new StringWriter();
            string httpVerbName  = httpVerb.ToString().ToUpperInvariant();
            var    workerRequest = new SimulatedWorkerRequest(url, query, output, Cookies, httpVerbName, bodyData, headers);

            HttpRuntime.ProcessRequest(workerRequest);

            // Capture the output
            AddAnyNewCookiesToCookieCollection();
            Session = LastRequestData.HttpSessionState;

            // In the case of errors, try to pull out some useful info from the HttpContext
            var response = LastRequestData.Response ??
                           RecoverResponseData(LastRequestData.ActionExecutedContext, workerRequest);

            return(new RequestResult
            {
                ResponseText = output.ToString(),
                ActionExecutedContext = LastRequestData.ActionExecutedContext,
                ResultExecutedContext = LastRequestData.ResultExecutedContext,
                Response = response
            });
        }
示例#3
0
        private RequestResult ProcessRequest(string url, HttpVerbs httpVerb, object formValues, NameValueCollection headers)
        {
            var formNameValueCollection = NameValueCollectionConversions.ConvertFromObject(formValues);

            if (url == null)
            {
                throw new ArgumentNullException("url");
            }

            // Fix up URLs that incorrectly start with / or ~/
            if (url.StartsWith("~/"))
            {
                url = url.Substring(2);
            }
            else if (url.StartsWith("/"))
            {
                url = url.Substring(1);
            }

            // Parse out the querystring if provided
            var query = "";
            var querySeparatorIndex = url.IndexOf("?", StringComparison.Ordinal);

            if (querySeparatorIndex >= 0)
            {
                query = url.Substring(querySeparatorIndex + 1);
                url   = url.Substring(0, querySeparatorIndex);
            }

            // Perform the request
            LastRequestData.Reset();
            var output        = new StringWriter();
            var httpVerbName  = httpVerb.ToString().ToLower();
            var workerRequest = new SimulatedWorkerRequest(url, query, output, Cookies, httpVerbName, formNameValueCollection, headers);

            HttpRuntime.ProcessRequest(workerRequest);

            // Capture the output
            AddAnyNewCookiesToCookieCollection();
            Session = LastRequestData.HttpSessionState;
            return(new RequestResult
            {
                ResponseText = output.ToString(),
                ActionExecutedContext = LastRequestData.ActionExecutedContext,
                ResultExecutedContext = LastRequestData.ResultExecutedContext,
                Response = LastRequestData.Response,
            });
        }
        private HttpResponse RecoverResponseData(ControllerContext ctx, SimulatedWorkerRequest workerRequest)
        {
            if (ctx == null || ctx.HttpContext == null || ctx.HttpContext.Response == null)
            {
                return(new HttpResponse(TextWriter.Null)
                {
                    StatusCode = workerRequest.LastStatusCode,
                    StatusDescription = workerRequest.LastStatusDescription
                });
            }

            var orig = ctx.HttpContext.Response;

            return(new HttpResponse(TextWriter.Null)
            {
                StatusCode = orig.StatusCode,
                Charset = orig.Charset,
                ContentType = orig.ContentType,
                RedirectLocation = orig.RedirectLocation
            });
        }
        //public RequestResult Get(string url)
        //{
        //    return ProcessRequest(url, HttpVerbs.Get, new NameValueCollection());
        //}
        ///// <summary>
        ///// Sends a post to your url. Url should NOT start with a /
        ///// </summary>
        ///// <param name="url"></param>
        ///// <param name="formData"></param>
        ///// <example>
        ///// <code>
        ///// var result = Post("registration/create", new
        ///// {
        /////     Form = new
        /////     {
        /////         InvoiceNumber = "10000",
        /////         AmountDue = "10.00",
        /////         Email = "*****@*****.**",
        /////         Password = "******",
        /////         ConfirmPassword = "******"
        /////     }
        ///// });
        ///// </code>
        ///// </example>
        //public RequestResult Post(string url, object formData)
        //{
        //    var formNameValueCollection = NameValueCollectionConversions.ConvertFromObject(formData);
        //    return ProcessRequest(url, HttpVerbs.Post, formNameValueCollection);
        //}
        public RequestResult ProcessRequest(WorkerRequestSettings rqstSettings)
        {
            string url = rqstSettings.Url;

            // Perform the request
            LastRequestData.Reset();
            var output = new StringWriter();
            string httpVerbName = rqstSettings.httpMethodName.ToLower();
            var workerRequest = new SimulatedWorkerRequest(rqstSettings, output);
            HttpRuntime.ProcessRequest(workerRequest);

            // Capture the output
            AddAnyNewCookiesToCookieCollection();
            Session = LastRequestData.HttpSessionState;
            return new RequestResult
            {
                ResponseText = output.ToString(),
                ActionExecutedContext = LastRequestData.ActionExecutedContext,
                ResultExecutedContext = LastRequestData.ResultExecutedContext,
                Response = LastRequestData.Response,
            };
        }
示例#6
0
        //public RequestResult Get(string url)
        //{
        //    return ProcessRequest(url, HttpVerbs.Get, new NameValueCollection());
        //}

        ///// <summary>
        ///// Sends a post to your url. Url should NOT start with a /
        ///// </summary>
        ///// <param name="url"></param>
        ///// <param name="formData"></param>
        ///// <example>
        ///// <code>
        ///// var result = Post("registration/create", new
        ///// {
        /////     Form = new
        /////     {
        /////         InvoiceNumber = "10000",
        /////         AmountDue = "10.00",
        /////         Email = "*****@*****.**",
        /////         Password = "******",
        /////         ConfirmPassword = "******"
        /////     }
        ///// });
        ///// </code>
        ///// </example>
        //public RequestResult Post(string url, object formData)
        //{
        //    var formNameValueCollection = NameValueCollectionConversions.ConvertFromObject(formData);
        //    return ProcessRequest(url, HttpVerbs.Post, formNameValueCollection);
        //}

        public RequestResult ProcessRequest(WorkerRequestSettings rqstSettings)
        {
            string url = rqstSettings.Url;

            // Perform the request
            LastRequestData.Reset();
            var    output        = new StringWriter();
            string httpVerbName  = rqstSettings.httpMethodName.ToLower();
            var    workerRequest = new SimulatedWorkerRequest(rqstSettings, output);

            HttpRuntime.ProcessRequest(workerRequest);

            // Capture the output
            AddAnyNewCookiesToCookieCollection();
            Session = LastRequestData.HttpSessionState;
            return(new RequestResult
            {
                ResponseText = output.ToString(),
                ActionExecutedContext = LastRequestData.ActionExecutedContext,
                ResultExecutedContext = LastRequestData.ResultExecutedContext,
                Response = LastRequestData.Response,
            });
        }
        public RequestResult ProcessRequest(string url, HttpVerbs httpVerb, NameValueCollection formValues, NameValueCollection headers)
        {
            if (url == null) throw new ArgumentNullException("url");

            // Fix up URLs that incorrectly start with / or ~/
            if (url.StartsWith("~/"))
                url = url.Substring(2);
            else if(url.StartsWith("/"))
                url = url.Substring(1);

            // Parse out the querystring if provided
            string query = "";
            int querySeparatorIndex = url.IndexOf("?");
            if (querySeparatorIndex >= 0) {
                query = url.Substring(querySeparatorIndex + 1);
                url = url.Substring(0, querySeparatorIndex);
            }                

            // Perform the request
            LastRequestData.Reset();
            var output = new StringWriter();
            string httpVerbName = httpVerb.ToString().ToLower();
            var workerRequest = new SimulatedWorkerRequest(url, query, output, Cookies, httpVerbName, formValues, headers);
            HttpRuntime.ProcessRequest(workerRequest);

            // Capture the output
            AddAnyNewCookiesToCookieCollection();
            Session = LastRequestData.HttpSessionState;
            return new RequestResult
            {
                ResponseText = output.ToString(),
                ActionExecutedContext = LastRequestData.ActionExecutedContext,
                ResultExecutedContext = LastRequestData.ResultExecutedContext,
                Response = LastRequestData.Response,
            };
        }