diff --git a/AspNetCoreLearnOfficial.sln b/AspNetCoreLearnOfficial.sln index 4f77c3b..0a77234 100644 --- a/AspNetCoreLearnOfficial.sln +++ b/AspNetCoreLearnOfficial.sln @@ -15,9 +15,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ContosoPizza", "WebUIWithRa EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "API-Blazor", "API-Blazor", "{28BC88DF-A712-4EFA-9209-7A95027B1BE0}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyApi", "MyApi\MyApi.csproj", "{1F7ECC29-0FDD-48D9-843D-CB467D0EC9A5}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyApi", "MyApi\MyApi.csproj", "{1F7ECC29-0FDD-48D9-843D-CB467D0EC9A5}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyBlazorApp", "MyBlazorApp\MyBlazorApp.csproj", "{762A7F54-B790-40E2-AB92-C562843E299A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyBlazorApp", "MyBlazorApp\MyBlazorApp.csproj", "{762A7F54-B790-40E2-AB92-C562843E299A}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/MyApi/Controllers/WeatherForecastController.cs b/MyApi/Controllers/WeatherForecastController.cs index 2b2a405..4ffced9 100644 --- a/MyApi/Controllers/WeatherForecastController.cs +++ b/MyApi/Controllers/WeatherForecastController.cs @@ -19,15 +19,19 @@ namespace MyApi.Controllers } [HttpGet(Name = "GetWeatherForecast")] - public IEnumerable Get() + public async Task> Get() { - return Enumerable.Range(1, 5).Select(index => new WeatherForecast + return await Task.Run(async () => { - Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)), - TemperatureC = Random.Shared.Next(-20, 55), - Summary = Summaries[Random.Shared.Next(Summaries.Length)] - }) - .ToArray(); + await Task.Delay(3000); + + return Enumerable.Range(1, 5).Select(index => new WeatherForecast + { + Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)), + TemperatureC = Random.Shared.Next(-20, 55), + Summary = Summaries[Random.Shared.Next(Summaries.Length)] + }).ToArray(); + }); } } } diff --git a/MyBlazorApp/Components/Pages/Weather.razor b/MyBlazorApp/Components/Pages/Weather.razor index 43a1ecb..1d6a02f 100644 --- a/MyBlazorApp/Components/Pages/Weather.razor +++ b/MyBlazorApp/Components/Pages/Weather.razor @@ -1,25 +1,25 @@ @page "/weather" -@attribute [StreamRendering] +@using MyBlazorApp.Services +@inject WeatherForecastService ForecastService -Weather +

Weather Forecast ☀️

-

Weather

- -

This component demonstrates showing data.

- -@if (forecasts == null) +@if (isLoading) { -

Loading...

+

불러오는 중...

} -else +else if (forecasts is not null && forecasts.Any()) { +
+ +
- - - - + + + + @@ -35,30 +35,39 @@ else
DateTemp. (C)Temp. (F)Summary날짜온도 (C)온도 (F)요약
} +else +{ +

유효한 데이터가 없습니다.

+} + @code { - private WeatherForecast[]? forecasts; + private IEnumerable forecasts; + private bool isLoading = true; protected override async Task OnInitializedAsync() { - // Simulate asynchronous loading to demonstrate streaming rendering - await Task.Delay(500); - - var startDate = DateOnly.FromDateTime(DateTime.Now); - var summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; - forecasts = 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(); + await LoadForecasts(); } - private class WeatherForecast + private async Task LoadForecasts() { - public DateOnly Date { get; set; } - public int TemperatureC { get; set; } - public string? Summary { get; set; } - public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); + try + { + Console.WriteLine("Call Forecasts"); + forecasts = await ForecastService.GetForecastsAsync(); + Console.WriteLine($"Received {forecasts.Count()} reulsts"); + } + catch (Exception ex) + { + Console.WriteLine($"Error fetching data: {ex.Message}"); + } + finally + { + isLoading = false; + Console.WriteLine("Call StateHasChanged"); + StateHasChanged(); + Console.WriteLine("End StateHasChanged"); + } } -} +} \ No newline at end of file diff --git a/MyBlazorApp/Program.cs b/MyBlazorApp/Program.cs index 7f31313..dcbe879 100644 --- a/MyBlazorApp/Program.cs +++ b/MyBlazorApp/Program.cs @@ -1,4 +1,5 @@ using MyBlazorApp.Components; +using MyBlazorApp.Services; namespace MyBlazorApp { @@ -12,6 +13,12 @@ namespace MyBlazorApp builder.Services.AddRazorComponents() .AddInteractiveServerComponents(); + // Add HTTPClient (API) + builder.Services.AddHttpClient("MyApi", client => + { + client.BaseAddress = new Uri("http://localhost:5122"); + }); + var app = builder.Build(); // Configure the HTTP request pipeline. diff --git a/MyBlazorApp/Services/WeatherForecastService.cs b/MyBlazorApp/Services/WeatherForecastService.cs new file mode 100644 index 0000000..aab8d27 --- /dev/null +++ b/MyBlazorApp/Services/WeatherForecastService.cs @@ -0,0 +1,29 @@ +namespace MyBlazorApp.Services +{ + public class WeatherForecastService + { + private readonly HttpClient _httpClient; + + public WeatherForecastService(HttpClient httpClient) + { + _httpClient = httpClient; + } + + public async Task> GetForecastsAsync() + { + var res = await _httpClient.GetFromJsonAsync>("weatherforecast"); + return res; + } + } + + public class WeatherForecast + { + public DateOnly Date { get; set; } + + public int TemperatureC { get; set; } + + public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); + + public string? Summary { get; set; } + } +}