aspnetcore/test/testapps/BasicTestApp/HttpClientTest/HttpRequestsComponent.cshtml

124 lines
3.8 KiB
Plaintext

@using System.Net
@using System.Net.Http
@inject Microsoft.AspNetCore.Blazor.Browser.Services.Temporary.HttpClient Http
<h1>HTTP request tester</h1>
<p>
<div>URI:</div>
<input id="request-uri" value=@uri @onchange(value => { uri = (string)value; }) size="60"/>
</p>
<p>
<div>Method:</div>
<select id="request-method" value=@method @onchange(value => { method = (string)value; })>
<option value="GET">GET</option>
<option value="POST">POST</option>
<option value="PUT">PUT</option>
<option value="DELETE">DELETE</option>
</select>
</p>
<p>
<div>Request body:</div>
<textarea id="request-body" value=@requestBody @onchange(value => { requestBody = (string)value; })></textarea>
</p>
<p>
<div>Request headers:</div>
@foreach (var header in requestHeaders)
{
<div class="header-entry">
Name: <input value=@header.Name @onchange(value => { header.Name = (string)value; }) />
Value: <input value=@header.Value @onchange(value => { header.Value = (string)value; }) />
[<a href="#" @onclick(() => RemoveHeader(header))>remove</a>]
</div>
}
<button id="add-header" @onclick(AddHeader)>Add</button>
</p>
<button id="send-request" @onclick(DoRequest)>Request</button>
@if (responseStatusCode.HasValue)
{
<h2>Response</h2>
<p><div>Status:</div><span id="response-status">@responseStatusCode</span></p>
<p><div>Body:</div><textarea id="response-body" readonly>@responseBody</textarea></p>
<p><div>Headers:</div><textarea id="response-headers" readonly>@responseHeaders</textarea></p>
}
<style type="text/css">
textarea {
width: 100%;
height: 60px;
}
</style>
@functions {
string uri = "http://api.icndb.com/jokes/random";
string method = "GET";
string requestBody = "";
List<RequestHeader> requestHeaders = new List<RequestHeader>();
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)
{
if (!requestMessage.Headers.TryAddWithoutValidation(header.Name, header.Value))
{
requestMessage.Content?.Headers.TryAddWithoutValidation(header.Name, header.Value);
}
}
var response = await Http.SendAsync(requestMessage);
responseStatusCode = response.StatusCode;
responseBody = await response.Content.ReadAsStringAsync();
var allHeaders = response.Headers.Concat(response.Content?.Headers
?? Enumerable.Empty<KeyValuePair<string, IEnumerable<string>>>());
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; }
}
}