@using System.Net @using System.Net.Http @using Microsoft.AspNetCore.Blazor.Browser.Http @inject HttpClient Http

HTTP request tester

URI:

Method:

Request body:

Request headers:
@foreach (var header in requestHeaders) {
Name: Value: [remove]
}

Request referrer:

@if (responseStatusCode.HasValue) {

Response

Status:
@responseStatusCode

Body:

Headers:

} @functions { string uri = "http://api.icndb.com/jokes/random"; string method = "GET"; string requestBody = ""; List requestHeaders = new List(); string requestReferrer = ""; HttpStatusCode? responseStatusCode; string responseBody; string responseHeaders; async void DoRequest() { responseStatusCode = null; try { var requestMessage = new HttpRequestMessage() { Method = new HttpMethod(method), RequestUri = new Uri(uri), Content = string.IsNullOrEmpty(requestBody) ? null : new StringContent(requestBody) }; foreach (var header in requestHeaders) { // StringContent automatically adds its own Content-Type header with default value "text/plain" // If the developer is trying to specify a content type explicitly, we need to replace the default value, // rather than adding a second Content-Type header. if (header.Name.Equals("Content-Type", StringComparison.OrdinalIgnoreCase) && requestMessage.Content != null) { requestMessage.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(header.Value); continue; } if (!requestMessage.Headers.TryAddWithoutValidation(header.Name, header.Value)) { requestMessage.Content?.Headers.TryAddWithoutValidation(header.Name, header.Value); } } if (!string.IsNullOrEmpty(requestReferrer)) { requestMessage.Properties[BrowserHttpMessageHandler.FetchArgs] = new { referrer = requestReferrer }; } var response = await Http.SendAsync(requestMessage); responseStatusCode = response.StatusCode; responseBody = await response.Content.ReadAsStringAsync(); var allHeaders = response.Headers.Concat(response.Content?.Headers ?? Enumerable.Empty>>()); responseHeaders = string.Join( Environment.NewLine, allHeaders.Select(pair => $"{pair.Key}: {pair.Value.First()}").ToArray()); } catch (Exception ex) { if (ex is AggregateException) { ex = ex.InnerException; } responseStatusCode = HttpStatusCode.SeeOther; responseBody = ex.Message + Environment.NewLine + ex.StackTrace; } StateHasChanged(); } void AddHeader() => requestHeaders.Add(new RequestHeader()); void RemoveHeader(RequestHeader header) => requestHeaders.Remove(header); class RequestHeader { public string Name { get; set; } public string Value { get; set; } } }