Http request service added

This commit is contained in:
gaz8860 Gary 2023-04-15 00:00:22 +01:00
parent 992414bd50
commit 25e93a39fd
8 changed files with 45 additions and 102 deletions

View File

@ -0,0 +1,31 @@
namespace PanoptesFrontend.Data;
using System.Net.Http;
using System.Threading.Tasks;
using System.Text.Json;
public interface IHttpService
{
Task<T> GetAsync<T>(string endpoint);
}
public class HttpService : IHttpService {
private readonly HttpClient httpClient;
public HttpService(HttpClient httpClient){
this.httpClient = httpClient;
}
public async Task<T> GetAsync<T>(string endpoint){
var response = await httpClient.GetAsync(endpoint);
if (response.IsSuccessStatusCode){
var contentStream = await response.Content.ReadAsStreamAsync();
var options = new JsonSerializerOptions {PropertyNameCaseInsensitive = true};
return await JsonSerializer.DeserializeAsync<T>(contentStream, options);
}
else {
throw new Exception($"Failed to get data from endpoint: {endpoint}. Error code: {response.StatusCode}");
}
}
}

View File

@ -1,12 +0,0 @@
namespace PanoptesFrontend.Data;
public class WeatherForecast
{
public DateTime Date { get; set; }
public int TemperatureC { get; set; }
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
public string? Summary { get; set; }
}

View File

@ -1,19 +0,0 @@
namespace PanoptesFrontend.Data;
public class WeatherForecastService
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
public Task<WeatherForecast[]> GetForecastAsync(DateTime startDate)
{
return Task.FromResult(Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = startDate.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
}).ToArray());
}
}

View File

@ -1,48 +0,0 @@
@page "/fetchdata"
<PageTitle>Weather forecast</PageTitle>
@using PanoptesFrontend.Data
@inject WeatherForecastService ForecastService
<h1>Weather forecast</h1>
<p>This component demonstrates fetching data from a service.</p>
@if (forecasts == null)
{
<p><em>Loading...</em></p>
}
else
{
<table class="table">
<thead>
<tr>
<th>Date</th>
<th>Temp. (C)</th>
<th>Temp. (F)</th>
<th>Summary</th>
</tr>
</thead>
<tbody>
@foreach (var forecast in forecasts)
{
<tr>
<td>@forecast.Date.ToShortDateString()</td>
<td>@forecast.TemperatureC</td>
<td>@forecast.TemperatureF</td>
<td>@forecast.Summary</td>
</tr>
}
</tbody>
</table>
}
@code {
private WeatherForecast[]? forecasts;
protected override async Task OnInitializedAsync()
{
forecasts = await ForecastService.GetForecastAsync(DateTime.Now);
}
}

View File

@ -1,10 +0,0 @@
<div class="card">
<div class="card-body">
<p>@Data.Text</p>
</div>
</div>
@code {
[Parameter]
public Component Data { get; set; }
}

View File

@ -1,11 +1,10 @@
@page "/test"
@using System.Net.Http.Json
@using System.Text.Json
@using PanoptesFrontend.Data
@using System.Text.Json;
@inject IHttpService httpService
@inject HttpClient httpClient
@if (data != null)
@* @if (data != null)
{
@foreach (var component in data) {
switch (component.Type) {
@ -28,16 +27,17 @@
}
}
}
} *@
<pre>@response.Text</pre>
@code {
private Component[] data;
private Component response;
protected override async Task OnInitializedAsync()
{
var response = await httpClient.GetStringAsync("http://localhost:8080/schema");
var options = new JsonSerializerOptions {PropertyNameCaseInsensitive = true};
var json = JsonSerializer.Deserialize<Schema>(response, options);
data = json.components;
response = await httpService.GetAsync<Component>("http://localhost:8080/test");
}
}
}

View File

@ -8,6 +8,7 @@
<ItemGroup>
<PackageReference Include="Blazor-ApexCharts" Version="0.9.20-beta" />
<PackageReference Include="xunit" Version="2.4.2" />
</ItemGroup>
</Project>

View File

@ -7,8 +7,8 @@ var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
builder.Services.AddSingleton<WeatherForecastService>();
builder.Services.AddHttpClient();
builder.Services.AddSingleton<IHttpService, HttpService>();
var app = builder.Build();