본문 바로가기
C#

[C#] ASP.NET Core에서 클라이언트 데이터 전달 방법 (쿼리 스트링 vs 경로 변수)

by haheehee 2025. 3. 19.
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()`을 사용해 디코딩해야 함.

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이 길어질 가능성이 있음.

🚀 마무리

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

댓글