1. 로그인 동작을 위해서 viewmodel 로 관련 뷰에서 동작할 모든 로직을 viewmodel에서 관리 1.1. view 와 viewmodel의 관계는 1:N으로 동작하는것을 기반으로 두고 있음 2. API 접근하는 방식도 웹만의 접근 방법에서 수정 3. 로그인 동작 정보 받는 로직 수정
43 lines
1.3 KiB
C#
43 lines
1.3 KiB
C#
using System.Net.Http.Json;
|
|
using Front.Program.Models;
|
|
|
|
namespace Front.Program.Services;
|
|
|
|
public class APIService
|
|
{
|
|
private readonly HttpClient _http;
|
|
|
|
|
|
public APIService(HttpClient http)
|
|
{
|
|
_http = http;
|
|
}
|
|
|
|
|
|
private string ChangeToString<T>(T data)
|
|
{
|
|
if (data == null) return string.Empty;
|
|
var properties = typeof(T).GetProperties();
|
|
var value = properties.Select(p => $"{p.Name}={p.GetValue(data)}");
|
|
return string.Join("&", value);
|
|
}
|
|
|
|
public async Task<APIResponseStatus<TResponse>?> GetJsonAsync<TResponse,TRequest>(string url, TRequest value)
|
|
{
|
|
string parameter = ChangeToString(value);
|
|
var response = await _http.GetFromJsonAsync<APIResponseStatus<TResponse>>($"{url}?{parameter}");
|
|
return response;
|
|
}
|
|
|
|
}
|
|
|
|
/*
|
|
dynamic 타입을 사용하면:
|
|
타입 안전성이 떨어집니다
|
|
컴파일 타임에 오류를 잡을 수 없습니다
|
|
런타임에 예상치 못한 오류가 발생할 수 있습니다
|
|
현재 Register.razor.cs에서 JsonElement를 사용하는 방식이 더 안전할 수 있습니다. 왜냐하면:
|
|
JSON 응답의 구조를 명시적으로 확인할 수 있습니다 (TryGetProperty 사용)
|
|
각 속성의 타입을 명확하게 처리할 수 있습니다
|
|
예상치 못한 데이터 구조에 대해 더 안전하게 대응할 수 있습니다
|
|
*/ |