private void BuildHeaders(TESTfulViewModel Model)
        {
            if (Model.UseHostHeader == true)
            {
                client.DefaultRequestHeaders.Host = Model.ResolvedURL.Host;
            }

            client.DefaultRequestHeaders.UserAgent.Clear();
            Model.AgentNameHeader    = (string.IsNullOrWhiteSpace(Model.AgentNameHeader) == true) ? "TESTfulRuntime" : Model.AgentNameHeader;
            Model.AgentVersionHeader = (string.IsNullOrWhiteSpace(Model.AgentVersionHeader) == true) ? "1.0" : Model.AgentVersionHeader;
            if (Model.UseAgentHeader == true)
            {
                client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue(Model.AgentNameHeader, Model.AgentVersionHeader));
            }

            client.DefaultRequestHeaders.Accept.Clear();
            Model.AcceptHeader = (string.IsNullOrWhiteSpace(Model.AcceptHeader) == true) ? "*/*" : Model.AcceptHeader;
            if (Model.UseAcceptHeader == true)
            {
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(Model.AcceptHeader));
            }

            client.DefaultRequestHeaders.Connection.Clear();
            Model.ConnectionHeader = (string.IsNullOrWhiteSpace(Model.ConnectionHeader) == true) ? "keep-alive" : Model.ConnectionHeader;
            if (Model.UseConnectionHeader == true)
            {
                client.DefaultRequestHeaders.Connection.Add(Model.ConnectionHeader);
            }

            RequestMediaType =
                (Model.RequestBodyMediaType == MediaType.Text) ? MediaTypeNames.Text.Plain :
                (Model.RequestBodyMediaType == MediaType.HTML) ? MediaTypeNames.Text.Html : MediaTypeNames.Application.Json;
        }
        private async Task ReadResponse(TESTfulViewModel Model)
        {
            Model.ResponseURL     = Model.ResolvedURL.Host;
            Model.ResponseStatus  = ((int)responseMessage.StatusCode).ToString() + " " + responseMessage.StatusCode.ToString();
            Model.ResponseSuccess = responseMessage.IsSuccessStatusCode;
            Model.ResponseHeader  = responseMessage.Headers.ToString();
            Model.ResponseBody    = await responseMessage.Content.ReadAsStringAsync();

            Model.ResponseCookies = "";

            if (responseMessage.Headers.Contains("Set-Cookie") == false)
            {
                return;
            }

            foreach (string cookieString in responseMessage.Headers.GetValues("Set-Cookie"))
            {
                if (string.IsNullOrEmpty(cookieString) == true)
                {
                    continue;
                }

                Model.ResponseCookies = Model.ResponseCookies + cookieString + "\n \n";
            }
        }
Example #3
0
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            Model           = (TESTfulViewModel)validationContext.ObjectInstance;
            RawRequestedURL = (string)value;

            if (string.IsNullOrWhiteSpace(RawRequestedURL) == true)
            {
                return(new ValidationResult(NullError));
            }
            if (Uri.TryCreate(RawRequestedURL, UriKind.Absolute, out RequestedURL) == false)
            {
                return(new ValidationResult(FormatError));
            }
            if (RequestedURL.IsWellFormedOriginalString() == false)
            {
                return(new ValidationResult(FormatError));
            }

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(RequestedURL);

            request.Timeout = 1000;

            try {
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) {
                    Model.ResolvedURL = RequestedURL;
                    return(ValidationResult.Success);
                }
            } catch (WebException) {
                return(new ValidationResult(UnreachableError));
            }
        }
        public async Task <IActionResult> Index(TESTfulViewModel Model)
        {
            if (ModelState.IsValid == false)
            {
                return(View(Model));
            }

            BuildHeaders(Model);
            await SendRequest(Model);
            await ReadResponse(Model);

            return(View(Model));
        }
        private async Task SendRequest(TESTfulViewModel Model)
        {
            Model.RequestBody = (string.IsNullOrWhiteSpace(Model.RequestBody) == true) ? "" : Model.RequestBody;

            switch (Model.Method)
            {
            case HTTPMethod.GET:
                responseMessage = await client.GetAsync(Model.ResolvedURL);

                break;

            case HTTPMethod.POST:
                responseMessage = await client.PostAsync(Model.ResolvedURL, new StringContent(Model.RequestBody, Encoding.UTF8, RequestMediaType));

                break;

            case HTTPMethod.PUT:
                responseMessage = await client.PutAsync(Model.ResolvedURL, new StringContent(Model.RequestBody, Encoding.UTF8, RequestMediaType));

                break;

            case HTTPMethod.PATCH:
                responseMessage = await client.PatchAsync(Model.ResolvedURL, new StringContent(Model.RequestBody, Encoding.UTF8, RequestMediaType));

                break;

            case HTTPMethod.DELETE:
                responseMessage = await client.DeleteAsync(Model.ResolvedURL);

                break;

            case HTTPMethod.Length:
                break;

            default:
                break;
            }
        }