Blazor 프로젝트(RankingApp) 내의 Models/GameResult.cs는 삭제합니다.
왜냐하면 WebAPI 구현 시 생성했던 SharedData 프로젝트 내 GameResult.cs를 공용 모델로 사용하기 때문입니다.
RankingApp → Models 폴더 삭제 GameResult.cs 삭제 RankingApp 프로젝트에서 SharedData를 참조하도록 설정합니다.
SharedData 체크GameResult를 참조하는 모든 파일에서 기존 RankingApp.Data.Models 참조 제거 후 아래처럼 수정합니다:
using SharedData.Models;
적용 대상:
RankingService.csRanking.razorApplicationDbContext.cs → 해당 스크립트에서는 DbSet<GameResult>도 제거합니다. WebAPI가 대신 처리하므로 더 이상 필요 없음.이제 RankingService.cs 내부에서 직접 DB에 접근하지 않고 WebAPI를 통해 처리합니다.
기존 함수들을 모두 지웁니다:
// 아래 메서드들 삭제
- AddGameResult()
- GetGameResultsAsync()
- UpdateGameResult()
- DeleteGameResult()
기존 구조:
[Client (Blazor)] ↔ [Server (Blazor)] → [DB]
변경 후 구조:
[Client (Blazor)] ↔ [WebAPI] → [DB]
이제 WebAPI와 통신을 위해 HttpClient를 등록합니다.
Program.cs 수정builder.Services.AddHttpClient<RankingService>(c =>
{
c.BaseAddress = new Uri("https://localhost:44360"); // ← WebAPI의 포트 번호
});
포트 번호 확인:
WebAPI 프로젝트 > Properties > launchSettings.json > sslPort
"sslPort": 44360
RankingService.cs를 다음과 같이 수정합니다:
using 구문using Newtonsoft.Json;
using SharedData.Models;
using System.Text;
HttpClient _httpClient;
public RankingService(HttpClient client)
{
_httpClient = client;
}
public async Task<GameResult> AddGameResult(GameResult gameResult)
{
string jsonStr = JsonConvert.SerializeObject(gameResult);
var content = new StringContent(jsonStr, Encoding.UTF8, "application/json");
var result = await _httpClient.PostAsync("api/ranking", content);
if (!result.IsSuccessStatusCode)
throw new Exception("AddGameResult Failed");
var resultContent = await result.Content.ReadAsStringAsync();
GameResult resGameResult = JsonConvert.DeserializeObject<GameResult>(resultContent);
return resGameResult;
}
public async Task<List<GameResult>> GetGameResultsAsync()
{
var result = await _httpClient.GetAsync("api/ranking");
var resultContent = await result.Content.ReadAsStringAsync();
List<GameResult> gameResults = JsonConvert.DeserializeObject<List<GameResult>>(resultContent);
return gameResults;
}
public async Task<bool> UpdateGameResult(GameResult gameResult)
{
string jsonStr = JsonConvert.SerializeObject(gameResult);
var content = new StringContent(jsonStr, Encoding.UTF8, "application/json");
var result = await _httpClient.PutAsync("api/ranking", content);
if (!result.IsSuccessStatusCode)
throw new Exception("UpdateGameResult Failed");
return true;
}
public async Task<bool> DeleteGameResult(GameResult gameResult)
{
var result = await _httpClient.DeleteAsync($"api/ranking/{gameResult.Id}");
if (!result.IsSuccessStatusCode)
throw new Exception("DeleteGameResult Failed");
return true;
}
Ranking.razor 파일에서 SaveGameResult() 함수를 다음과 같이 수정합니다:
@code {
List<GameResult> _gameResults;
async Task SaveGameResult()
{
if (_gameResult.Id == 0)
{
_gameResult.Date = DateTime.Now;
var result = await RankingService.AddGameResult(_gameResult);
}
else
{
var result = await RankingService.UpdateGameResult(_gameResult);
}
_showPopup = false;
_gameResults = await RankingService.GetGameResultsAsync();
}
}
Blazor와 WebAPI를 동시에 실행해야 합니다.
RankingApp과 WebApi 모두 시작으로 설정/ranking 페이지로 이동추가(Add) / 수정(Edit) / 삭제(Delete) 버튼 작동 확인