Computer >> 컴퓨터 >  >> 프로그램 작성 >> C#

C# ASP.NET WebAPI의 작업 메서드에서 사용자 지정 결과 형식을 반환하는 방법은 무엇입니까?

<시간/>

IHttpActionResult 인터페이스를 구현하여 결과 유형으로 자체 사용자 정의 클래스를 만들 수 있습니다. . IHttpActionResult에는 HttpResponseMessage 인스턴스를 비동기적으로 생성하는 단일 메서드인 ExecuteAsync가 포함되어 있습니다.

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

컨트롤러 작업이 IHttpActionResult를 반환하면 Web API는 ExecuteAsync 메서드를 호출하여 HttpResponseMessage를 만듭니다. 그런 다음 HttpResponseMessage를 HTTP 응답 메시지로 변환합니다.

예시

사용자 정의 결과를 얻으려면 IHttpActionResult 인터페이스를 구현하는 클래스를 만들어야 합니다.

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);
      }
   }
}

컨트롤러 작업 -

예시

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);
      }
   }
}

다음은 사용자 정의 결과를 반환하는 엔드포인트의 우편 배달부 출력입니다.

C# ASP.NET WebAPI의 작업 메서드에서 사용자 지정 결과 형식을 반환하는 방법은 무엇입니까?