forked from AcaMate/AcaMate_Web
1. 쿠키만 사용하던 저장 동작을 다른 저장소도 사용하게 변경 1.1. 쿠키 대신 세션 레포지토리를 기본적으로 사용하게 Service 코드 구현 2. 로그인 되었을 경우 화면 표기 변경 2.1. 시작하기 버튼 hidden 처리 2.2. 사용자 이름 불러오기 2.3. 로그인 동작 관련 변수 스토리지 저장 2.4. 서버에서 직접적인 크라이언트 쿠키 저장이 아닌 서버는 뒤의 값으로 간섭하게 변경
42 lines
1.3 KiB
C#
42 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 사용)
|
|
각 속성의 타입을 명확하게 처리할 수 있습니다
|
|
예상치 못한 데이터 구조에 대해 더 안전하게 대응할 수 있습니다
|
|
*/ |