.NET/ASP.NET

[ASP.NET Core Web API] Action Method - 응답

클리엘 2021. 3. 26. 11:57
728x90

Controller 내부에 요청을 받는 Action Method는 처리결과에 따라 다양한 응답을 반환할 수 있으며 이에 관한 대략적인 내용을 살펴보고자 합니다.

 

액션 메서드에서 특정 상태 값을 반환하려면 우선 반환형 식이 IActionResult로 지정되어 있어야 합니다.

[HttpGet]
public IActionResult Get()
{
            
}

정상적으로 어떤 처리가 완료되었다면 기본적으로 200 OK 상태를 반환할 수 있습니다.

[HttpGet]
public IActionResult Get()
{
    return Ok();
}

 

참고로 OK() 메서드 뿐만 아니라 아래에 설명되는 거의 모든 메서드는 단독으로 응답을 하거나 필요한 경우 문자열, 객체 등을 전달해 상태 응답과 함께 위에 보시는 것처럼 구체적인 응답 내용을 함께 전달할 수 있습니다.

[HttpGet]
public IActionResult Get()
{
    return Ok();
    //return Ok("완료되었습니다.");
    //또는
    //return Ok(new student { id = 10, name = "홍길순" });
}

잘못된 요청이라면 400 BedRequest로 응답하며

[HttpGet]
public IActionResult Get()
{
    return BadRequest();
}

201 Created는 CreateAt~() 메서드로 응답하고 204 No Content는 NoContent() 메서드로 응답합니다.

[HttpGet]
public IActionResult Get()
{
    return CreatedAtAction("Get", new { id = 100 });
}

서식있는 문자 열등을 반환하는 경우는 Content()가 사용되고

[HttpGet]
public IActionResult Get()
{
    return Content("안녕하세요.");
}

500 Internal Server Error은 Problem() 메서드가 사용됩니다.

[HttpGet]
public IActionResult Get()
{
    return Problem("오류입니다.");
}

409 Conflict는 Conflict() 메서드로, 404 Not Found라면 NotFound() 메서드를 통해 응답할 수 있는데

[HttpGet]
public IActionResult Get()
{
    return NotFound("찾을 수 없습니다.");
}

프로젝트 전체에 걸쳐 404에 대한 응답을 대신하고자 한다면 startup.cs의 Configure메서드에서 인라인 미들웨어를 다음과 같이 추가해 주면 됩니다.

app.Run(async (context) => {
	context.Response.Headers["Content-Type"] = "text/html; charset=utf-9";
    await context.Response.WriteAsync("찾을 수 없습니다.");
});

ASP.NET Core Wwb API는 기본이 Json 포맷의 반환하지만 명시적으로 특정 객체를 Json으로 반환시킬 수도 있습니다.

[HttpGet]
public IActionResult Get()
{
    student std = new student() { id = 1, name = "홍길동" };

    return new JsonResult(std);
}

참고로 기본적인 응답이외에 추가적인 데이터를 반환하는 경우 드물지만 응답헤더에 데이터를 담아 전송하는 사레가 있습니다.

Response.Headers.Add("aaa", "bbb");

다만 헤더를 추가할때 Key로는 'X-'형태를 추가하는 것이 관례입니다.

728x90