Language/ASP.NET

[ASP.NET MVC5] Controller POST, DELETE 요청 메서드 만들기

범데이 2024. 6. 29. 17:27
728x90

1. 개요

 

일반적인 HTTP 요청의 메서드는 'GET', 'POST', 'PUT', 'DELETE' 가 있고,

ASP.NET MVC5의 Controller 클래스에서 아래와 같이 각 메서드별 Restful API를 만들 수 있다.

 

사실 모든 API를  'GET' 과 같은 단일 메서드로 만들고 처리해도 동작은 하지만, 이는 좋은 RESTful API 설계가 아니다.

(HTTP 요청 메서드를 구별해야하는 이유)

 

 

기본적으로 ASP.NET MVC5에서 'PUT', 'DELETE' 메서드를 만든 후 요청 테스트를 해보면, 아래처럼 404 Not Found 응답을 반환한다.

 

 

이는 ASP.NET MVC5의 'ExtensionlessUrlHandler-Integrated-4.0' 핸들러가 보안과 안정성의 이유로 인해 기본적으로 "GET", "HEAD", "POST", "DEBUG" 메서드만 허용하도록 설정되어있기 때문이다.

 

 

그래서 해당 핸들러를 수정하지 않으면 RESTful Web API로 ExtensionLess URL과 함께 "PUT", "DELETE"와 같은 메서드를 사용할 수 없다.

 

 

* ExtensionlessUrlHandler-Integrated-4.0 핸들러란?

ASP.NET MVC5에서 Extensionless URL을 처리하는 HTTP핸들러이다.

ASP.NET MVC 애플리케이션에서 URL은 일반적으로 파일 확장자가 없는 형태로 사용된다.

예를 들어, "/Home/Index" 같은 URL은 파일 확장자(.aspx, .html 등)가 없다. 

이 핸들러는 이러한 URL을 올바르게 처리하고 라우팅 시스템에 전달하는 역할을 한다.

 

(예를 들어 다음 URL은 동일한 파일을 제공한다.)

https://example.com/about.html

// Extensionless URL
https://example.com/about

 

 

2. 메서드 허용 방법

프로젝트 루트 경로의 web.config 파일에서 기존 핸들러를 remove하고, 새 핸들러를 등록한다.

등록 시 메서드(verb)에 허용할 메서드를 작성하면 되는데, 아래 예시에서는 모든 메서드(verb)에 대해 등록한다.

<system.webServer>
	<handlers>
		...
		<remove name="extensionlessUrlHandler-Integrated-4.0" />
		<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
		...
	</handlers>
</system.webServer>

 

위와 같이 추가하면 본래 허용되지 않았던 "PUT", "DELETE" 메서드도 허용이 되도록 설정된다.

 

 

3. 결과

위와 같이 설정한 후, 다시 API 요청 테스트를 해보면

아래와 같이 200 OK 상태와 함께 정상적으로 응답이 오는 걸 확인할 수 있다.

 

 
반응형