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

C# ASP.NET Web API에서 특정 HTTP 동사로 메서드 접근을 제한하는 방법

HTTP 동사(verb)는 REST 아키텍처의 핵심 제약 조건인 '균일한 인터페이스(uniform interface)'의 중요한 부분을 차지하며, 명사 기반의 리소스에 대해 수행할 행위(action)를 정의해 줍니다. 가장 널리 사용되는 HTTP 동사는 POST, GET, PUT, PATCH, DELETE이며, 각각 생성(Create), 조회(Read), 수정(Update), 삭제(Delete), 즉 CRUD 작업에 대응됩니다. 이 외에도 여러 동사가 존재하지만 사용 빈도는 낮은 편이며, 그중에서도 OPTIONS와 HEAD가 상대적으로 자주 활용됩니다.

ASP.NET Web API의 액션 메서드는 Get, Post, Put, Patch, Delete와 같은 HTTP 동사 이름 그대로 지정할 수 있습니다. 또한 가독성을 높이기 위해 HTTP 동사 뒤에 임의의 접미사를 붙이는 것도 가능합니다. 예를 들어 Get 역할을 하는 메서드는 GetAllStudents()처럼 Get으로 시작하는 이름으로 작성하면 됩니다.

예제

public class DemoController : ApiController{
    public IHttpActionResult GetAllStudents(){
        //학생 데이터 조회
        return Ok();
    }
    public IHttpActionResult Post([FromBody]Student student){
        //학생 데이터 삽입
        return Ok();
    }
    public IHttpActionResult Put([FromBody]Student student){
        //학생 데이터 수정
        return Ok();
    }
    public IHttpActionResult Delete(int id){
        //학생 데이터 삭제
        return Ok();
    }
}

Http Verb Attribute를 이용한 접근 제한

메서드 이름으로 HTTP 동사를 정의하는 방식 외에도, Http Verb Attribute를 사용할 수 있습니다. 이 특성을 활용하면 ASP.NET Web API의 액션 메서드가 특정 HTTP 메서드로만 호출되도록 손쉽게 제한할 수 있습니다.

예제

using DemoWebApplication.Models;
using System.Collections.Generic;
using System.Web.Http;
namespace DemoWebApplication.Controllers{
    public class DemoController : ApiController{
        [HttpGet] //HttpVerb Attribute
        public IHttpActionResult FetchStudentsList(){
            List<Student> students = new List<Student>{
                new Student{
                    Id = 1,
                    Name = "Mark"
                },
                new Student{
                    Id = 2,
                    Name = "John"
                }
            };
            return Ok(students);
        }
    }
}

C# ASP.NET Web API에서 특정 HTTP 동사로 메서드 접근을 제한하는 방법

이번에는 위의 FetchStudentsList 액션 메서드에 POST 요청을 보내어 접근을 시도해 보겠습니다.

C# ASP.NET Web API에서 특정 HTTP 동사로 메서드 접근을 제한하는 방법

결과를 확인해 보면, [HttpGet] 특성이 적용된 FetchStudentsList 액션 메서드에 POST 요청을 전송했을 때 405 Method Not Allowed 응답이 반환되는 것을 알 수 있습니다. 이는 해당 메서드가 [HttpGet] 특성으로 데코레이트되어 GET 요청만 허용하도록 제한되어 있기 때문입니다.