Web API 액션 메소드는 다음과 같은 반환 유형을 가질 수 있습니다.
-
무효
-
원시형/복합형
-
HttpResponseMessage
-
IHttpActionResult
무효 -
모든 작업 메서드가 무언가를 반환해야 할 필요는 없습니다. void 반환 유형을 가질 수 있습니다.
예시
using DemoWebApplication.Models using System.Web.Http; namespace DemoWebApplication.Controllers{ public class DemoController : ApiController{ public void Get([FromBody] Student student){ //Some Operation } } }
void 반환 유형의 작업 메서드는 204 No Content를 반환합니다. 응답.
기본 유형/복합 유형 -
액션 메소드는 int, string과 같은 기본 유형 또는 List 등과 같은 복합 유형을 반환할 수 있습니다.
예시
using DemoWebApplication.Models; using System.Collections.Generic; using System.Web.Http; namespace DemoWebApplication.Controllers{ public class DemoController : ApiController{ public List<string> Get([FromBody] Student student){ return new List<string>{ $"The Id of the Student is {student.Id}", $"The Name of the Student is {student.Name}" }; } } }
HttpResponseMessage -
예시
HttpResponseMessage는 액션 메소드의 리턴 타입(액션 결과)을 커스터마이징 하고자 할 때 사용합니다. 응답은 상태 코드, 콘텐츠 유형 및 HttpResponseMessage에 반환될 데이터를 제공하여 사용자 지정됩니다.
using DemoWebApplication.Models; using System.Net; using System.Net.Http; using System.Web.Http; namespace DemoWebApplication.Controllers{ public class DemoController : ApiController{ public HttpResponseMessage Get([FromBody] Student student){ if(student.Id > 0){ return Request.CreateResponse(HttpStatusCode.OK, $"The Sudent Id is {student.Id} and Name is {student.Name}"); } else { return Request.CreateResponse(HttpStatusCode.BadRequest, $"InValid Student Id"); } } } }
위의 예에서 Response가 사용자 정의된 것을 볼 수 있습니다. action 메소드로 전달되는 Id는 0이므로 else가 실행되고 400 Bad 요청이 반환되며 오류 메시지가 제공됩니다.
IHttpActionResult -
예시
IHttpActionResult 인터페이스는 Web API 2에서 도입되었습니다. 기본적으로 HttpResponseMessage 팩토리를 정의합니다. IHttpActionResult는 System.Web.Http 네임스페이스에 있습니다. HttpResponseMessage보다 IHttpActionResult를 사용하면 다음과 같은 장점이 있습니다.
-
컨트롤러의 단위 테스트를 단순화합니다.
-
HTTP 응답을 생성하기 위한 공통 로직을 별도의 클래스로 이동합니다.
-
응답 구성의 하위 수준 세부 정보를 숨겨 컨트롤러 작업의 의도를 더 명확하게 만듭니다.
예시
using DemoWebApplication.Models; using System.Collections.Generic; using System.Web.Http; namespace DemoWebApplication.Controllers{ public class DemoController : ApiController{ public IHttpActionResult Get([FromBody] Student student){ var result = new List<string>{ $"The Id of the Student is {student.Id}", $"The Name of the Student is {student.Name}" }; return Ok(result); } } }