QueryString

Shy·2025년 3월 14일

ASP.Net Core9

목록 보기
4/4

Query String(쿼리 스트링)

  • 쿼리 스트링은 ?key=value형식으로 URL 끝에 데이터를 추가하는 방식이다.
  • GET 요청에서 주로 사용되며, 선택적 데이터(검색, 필터링, 페이지네이션 등)를 전달할 때 유용하다.
  • 여러 개의 데이터를 &로 연결이 가능하다. (?category=laptop?sort=asc&page=2).
  • 브라우저에서 쉽게 확인할 수 있지만, 보안성이 낮아 비밀번호 토큰 같은 민감한 정보를 포함하면 안 된다.

예제

https://example.com/products?category=laptop&sort=asc&page=2

이 처럼, Query String은 서버로 데이터를 전달하는 간단한 방법이다!

특징설명
키-값 형식 (key=value)?name=John&age=25
다중 값 전달 가능?tags=aspnet&tags=dotnet (배열 형식)
공백( )과 특수 문자 (&, =)는 인코딩 필요?query=C%23%20web (C# web → URL 인코딩)
보안에 취약함URL에 데이터가 노출됨 (비밀번호, 민감한 정보 X)

ASP.NET Core에서 Query String 값 읽기

1. HttpContext.Request.Query 사용 (미들웨어 또는 app.MapGet())
ASP.NET Core에서는 [FromQuery]를 사용하면, Query String데이터를 컨트롤러 매개변수로 자동 바인딩 할 수 있다.

app.MapGet("/search", async (HttpContext context) =>
{
    var query = context.Request.Query["query"];
    var page = context.Request.Query["page"];
    
    await context.Response.WriteAsync($"Query: {query}, Page: {page}");
});

// 요청: GET /search?query=aspnet&page=2
// 응답: Query: aspnet, Page: 2

2. [FromQuery] 사용 (MVC 컨트롤러)
ASP.NET Core에서는 [FromQuery]를 사용하면 Query String 데이터를 컨트롤러 매개변수로 자동 바인딩할 수 있다.

[HttpGet("products")]
public IActionResult GetProducts([FromQuery] string category, [FromQuery] int page = 1)
{
    return Ok(new { Category = category, Page = page });
}
// 요청 : GET /products?category=laptop&page=3

응답을 아래와 같다.

{
    "Category": "laptop",
    "Page": 3
}

3. Query String에서 다중 값(배열) 전달하기
여러 개의 동일한 키를 사용하여, 다중의 값을 받을 때 사용한다.
GET /api/tags?tags=aspnet&tags=dotnet&tags=csharp
위 요청은 tags에 여러 value가 매칭되어 있는데, 이럴 때는 아래와 같이 Controller에서 배열로 받으면 된다.

[HttpGet("tags")]
public IActionResult GetTags([FromQuery] List<string> tags)
{
    return Ok(tags);
}

// 응답 ["aspnet", "dotnet", "csharp"]

Query String 과 Route Parameter의 차이점

비교 항목Query String (?key=value)Route Parameter (/{value})
형식URL 끝에 추가 (?category=laptop&page=2)URL 경로 일부로 포함 (/users/123)
용도선택적 데이터 전달 (검색, 필터링, 정렬)필수 데이터 (리소스 식별)
RESTful API 적용❌ URL이 명확하지 않음✅ URL이 RESTful하고 직관적
순서 영향없음 (?a=1&b=2 == ?b=2&a=1)있음 (/users/{id}/orders/{orderId})

[FromQuery] 특징 및 사용법

속성역할사용 예시
[FromQuery]Query String 데이터 자동 바인딩GET /products?category=laptop&page=3
[FromRoute]URL 경로에서 값 바인딩GET /users/123
[FromBody]HTTP 요청 본문에서 데이터 받기 (JSON)POST /users { "name": "John" }

즉, Query String 데이터는 [FromQuery], URL 경로 데이터는 [FromRoute], 요청 본문 데이터는 [FromBody] 를 사용한다!


[FromQuery]의 주요 기능

1. 객체(Query String을 객체로 받기)
GET /users?name=John&age=30
위 요청을 아래 컨트롤러에 보낸 뒤, 객체로 받을 수 있다.

public class UserFilter
{
    public string Name { get; set; }
    public int Age { get; set; }
}

[HttpGet("users")]
public IActionResult GetUsers([FromQuery] UserFilter filter)
{
    return Ok(filter);
}
{
    "Name": "John",
    "Age": 30
}

[FromQuery]를 사용하면 Query String을 C# 객체로 쉽게 매핑할 수 있다!


Query String 과 Route Parameter 함께 사용하기

GET /users/123/orders?status=pending&page=2

[HttpGet("users/{id}/orders")]
public IActionResult GetUserOrders([FromRoute] int id, [FromQuery] string status, [FromQuery] int page = 1)
{
    return Ok(new { UserId = id, OrderStatus = status, Page = page });
}
{
    "UserId": 123,
    "OrderStatus": "pending",
    "Page": 2
}

주요 리소스는 Route Parameter, 선택적 필터링은 Query String으로 사용 가능하다.


결론

  • Query String은 ?key=value 형식으로 데이터를 전달하는 방식이다.
  • ASP.NET Core에서는 context.Request.Query["key"] 또는 [FromQuery]로 쉽게 가져올 수 있다.
  • 짧은 데이터 전달, 검색, 필터링, 페이지네이션 등에 적합하다.
  • 보안이 중요한 데이터(비밀번호, 민감한 정보)에는 사용하면 안 된다.
  • 배열 데이터를 ?tags=aspnet&tags=dotnet 방식으로 다중 전달 가능하다.
  • 리소스 식별에는 Route Parameter, 선택적 데이터 전달에는 Query String 사용한다
  • [FromQuery]를 사용하면 Query String 데이터를 컨트롤러에서 쉽게 바인딩 가능하다.
profile
신입사원...

0개의 댓글