728x90
ASP.NET Core에서 클라이언트가 데이터를 API로 전달하는 방법에는 크게 두 가지가 있습니다.
- 쿼리 스트링(Query Parameter) -
?key=value
형식으로 데이터를 전달 - 경로 변수(Path Parameter) - URL 경로 일부로 데이터를 포함
이 글에서는 두 가지 방법의 차이점을 설명하고, 각각의 코드 예제와 시행착오를 공유합니다.
1. 쿼리 스트링 방식 (Query Parameter)
쿼리 스트링 방식은 URL 뒤에 ?key=value
형태로 데이터를 전달하는 방법입니다.
📌 클라이언트 요청 예제
import axios from 'axios';
const dataToSend = "https://example.com";
const encodedData = btoa(unescape(encodeURIComponent(dataToSend)));
axios.get(`http://localhost:5000/api/example/endpoint`, {
params: { data: encodedData },
responseType: 'json'
}).then(res => {
console.log("Response received:", res);
}).catch(err => {
console.error("Error:", err);
});
📌 ASP.NET Core 서버 코드
app.MapGet("/api/example/endpoint", HandleRequest);
private async Task HandleRequest(HttpContext context)
{
try
{
if (!context.Request.Query.ContainsKey("data"))
{
return Results.BadRequest("Missing data query parameter.");
}
string encodedData = context.Request.Query["data"];
string decodedData = Encoding.UTF8.GetString(Convert.FromBase64String(encodedData));
return Results.Ok(new { Data = decodedData });
}
catch (Exception ex)
{
return Results.Problem("An error occurred while processing the request.");
}
}
✔ 시행착오
- 처음에는 URL을 직접 생성했지만, Axios에서 `params`를 사용하면 자동으로 `?data=` 형식으로 변환되어 편리함.
- `data`가 Base64로 인코딩되었으므로, 서버에서 `Convert.FromBase64String()`을 사용해 디코딩해야 함.
- 처음에는 URL을 직접 생성했지만, Axios에서 `params`를 사용하면 자동으로 `?data=` 형식으로 변환되어 편리함.
- `data`가 Base64로 인코딩되었으므로, 서버에서 `Convert.FromBase64String()`을 사용해 디코딩해야 함.
2. 경로 변수 방식 (Path Parameter)
경로 변수 방식은 데이터를 URL 경로의 일부로 포함하는 방법입니다.
📌 클라이언트 요청 예제
const encodedData = btoa(unescape(encodeURIComponent("https://example.com")));
axios.get(`http://localhost:5000/api/example/endpoint/${encodedData}`, {
responseType: 'json'
}).then(res => {
console.log("Response received:", res);
}).catch(err => {
console.error("Error:", err);
});
📌 ASP.NET Core 서버 코드
app.MapGet("/api/example/endpoint/{encodedData}", HandleRequest);
private async Task HandleRequest(string encodedData)
{
try
{
string decodedData = Encoding.UTF8.GetString(Convert.FromBase64String(encodedData));
return Results.Ok(new { Data = decodedData });
}
catch (Exception ex)
{
return Results.Problem("An error occurred while processing the request.");
}
}
✔ 시행착오
- 원래 데이터에 슬래시(`/`)가 포함되어 있을 경우, URL이 깨지는 문제가 발생할 수 있음.
- 이를 해결하기 위해 데이터를 Base64로 인코딩하여 전달함.
- 그러나, 이 방식은 쿼리 스트링 방식보다 URL이 길어질 가능성이 있음.
- 원래 데이터에 슬래시(`/`)가 포함되어 있을 경우, URL이 깨지는 문제가 발생할 수 있음.
- 이를 해결하기 위해 데이터를 Base64로 인코딩하여 전달함.
- 그러나, 이 방식은 쿼리 스트링 방식보다 URL이 길어질 가능성이 있음.
🚀 마무리
ASP.NET Core에서 데이터를 전달할 때, 쿼리 스트링 방식과 경로 변수 방식을 선택할 수 있습니다.
- 쿼리 스트링 방식: URL이 짧고 직관적이지만, 보안이 중요할 경우 Base64 인코딩을 고려해야 함.
- 경로 변수 방식: RESTful API에서 많이 사용되지만, Base64로 인코딩하지 않으면 경로가 깨질 위험이 있음.
상황에 맞게 적절한 방식을 선택하여 사용하면 더 안정적인 API를 설계할 수 있습니다!
728x90
'C#' 카테고리의 다른 글
[CSharp] C# Dictionary 딕셔너리 (0) | 2023.11.07 |
---|---|
[CSharp] C#의 record (0) | 2023.10.25 |
[CSharp] c# #2 kioskProject - CRUD, ORM (0) | 2023.08.31 |
[CSharp] c# #1 kioskProject - erd diagram (0) | 2023.08.31 |
[CSharp] C# study (0) | 2023.08.30 |
댓글