private void MakeRequestCommand_OnExecuted(object sender, ExecutedRoutedEventArgs e) { var currentUrlHistoryItem = getCurrentUrlHistoryModel(); if (!UrlHistory.Contains(currentUrlHistoryItem, urlHistoryModelEqualityComparer)) { UrlHistory.Insert(0, currentUrlHistoryItem); saveHistory(); } CurrentRequestViewModel.Headers = CurrentRequestViewModel.UIHeaders.Where(h => h.IsSelected).Select(h => new HttpHeader(h.Name, h.Value)).ToList(); _MainWindow.IsEnabled = false; new Action(() => CurrentResponseViewModel = xhrLogicManager.SendXHR(CurrentRequestViewModel)).BeginInvoke((ar => Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() => _MainWindow.IsEnabled = true))), null); }
XHRResponseModel parseResponseString(string responseString) { var lines = responseString.Split(new [] { Environment.NewLine }, StringSplitOptions.None).ToList(); var code = int.Parse(Regex.Match(lines[0], " [0-9]{3} ").Value); var message = Regex.Match(lines[0], " [0-9]{3} (.+)", RegexOptions.IgnoreCase).Groups[1].Value; var headerStrings = new List <string>(); int idx; for (idx = 1; idx < lines.Count; idx++) { if (lines[idx] == string.Empty) { break; } headerStrings.Add(lines[idx]); } var content = string.Join(string.Empty, lines.Skip(idx)); var headers = new List <HttpHeader>(); headerStrings.ForEach(hs => { var match = Regex.Match(hs, "(.+): (.+)"); var name = match.Groups[1].Value; var value = match.Groups[2].Value; headers.Add(new HttpHeader(name, value)); }); var result = new XHRResponseModel { StatusCode = (HttpStatusCode)Enum.Parse(typeof(HttpStatusCode), code.ToString()), HttpHeaders = headers, StatusMessage = message, Content = content }; return(result); }
public XHRResponseModel SendXHRUsingWebClient(XHRRequestModel requestModel) { var client = new HttpClient(); client.DefaultRequestHeaders.Clear(); var message = new HttpRequestMessage { Method = requestModel.Verb, RequestUri = new Uri(requestModel.Url, UriKind.Absolute) }; if (requestModel.Content != null) { message.Content = new StringContent(requestModel.Content, Encoding.Default, "application/json"); } requestModel.Headers.ForEach(h => message.Headers.TryAddWithoutValidation(h.Name, h.Value)); try { var result = client.SendAsync(message).Result; var response = new XHRResponseModel { Content = result.Content.ReadAsStringAsync().Result, StatusCode = result.StatusCode, HttpHeaders = result.Headers.Select(h => new HttpHeader(h.Key, h.Value.FirstOrDefault())).ToList() }; return(response); } catch (Exception ex) { return(new XHRResponseModel { Content = ex.ToString() }); } }