Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# ASP.NET Web API 액션 메서드에서 사용자 지정 결과 형식을 반환하는 방법

ASP.NET Web API에서는 IHttpActionResult 인터페이스를 구현하여 자신만의 사용자 지정 결과 형식(Custom Result Type)을 만들 수 있습니다. IHttpActionResult 인터페이스는 HttpResponseMessage 인스턴스를 비동기적으로 생성하는 단 하나의 메서드인 ExecuteAsync를 포함하고 있습니다.

public interface IHttpActionResult
{
    Task<HttpResponseMessage> ExecuteAsync(
        CancellationToken cancellationToken);
}

컨트롤러의 액션이 IHttpActionResult를 반환하면, Web API는 내부적으로 ExecuteAsync 메서드를 호출하여 HttpResponseMessage를 생성합니다. 이후 생성된 HttpResponseMessage는 HTTP 응답 메시지로 변환되어 클라이언트에 전달됩니다.

IHttpActionResult 구현 예제

사용자 지정 결과를 만들려면 IHttpActionResult 인터페이스를 구현하는 클래스를 작성해야 합니다. 아래 예제는 문자열 값을 받아 이를 커스텀 형식으로 감싸 응답하는 CustomResult 클래스입니다.

using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using System.Web.Http;

namespace DemoWebApplication.Controllers
{
    public class CustomResult : IHttpActionResult
    {
        string _value;
        HttpRequestMessage _request;

        public CustomResult(string value, HttpRequestMessage request)
        {
            _value = value;
            _request = request;
        }

        public Task<HttpResponseMessage> ExecuteAsync(
            CancellationToken cancellationToken)
        {
            var response = new HttpResponseMessage()
            {
                Content = new StringContent($"Customized Result: {_value}"),
                RequestMessage = _request
            };
            return Task.FromResult(response);
        }
    }
}

컨트롤러 액션에서 사용자 지정 결과 반환하기

이제 위에서 만든 CustomResult 클래스를 실제 컨트롤러 액션에서 활용해 보겠습니다. 아래 예제는 학생 목록에서 ID에 해당하는 학생을 찾아, 해당 학생의 이름을 사용자 지정 결과 형식으로 반환하는 코드입니다.

using DemoWebApplication.Models;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;

namespace DemoWebApplication.Controllers
{
    public class DemoController : ApiController
    {
        public IHttpActionResult Get(int id)
        {
            List<Student> students = new List<Student>
            {
                new Student
                {
                    Id = 1,
                    Name = "Mark"
                },
                new Student
                {
                    Id = 2,
                    Name = "John"
                }
            };

            var studentForId = students.FirstOrDefault(x => x.Id == id);
            return new CustomResult(studentForId.Name, Request);
        }
    }
}

실행 결과 확인

위 엔드포인트를 Postman으로 호출하면 다음과 같이 사용자 지정 결과가 응답 본문에 담겨 반환되는 것을 확인할 수 있습니다.

C# ASP.NET Web API 액션 메서드에서 사용자 지정 결과 형식을 반환하는 방법