1. 개요
일반적인 HTTP 요청의 메서드는 'GET', 'POST', 'PUT', 'DELETE' 가 있고,
ASP.NET MVC5의 Controller 클래스에서 아래와 같이 각 메서드별 Restful API를 만들 수 있다.
사실 모든 API를 'GET' 과 같은 단일 메서드로 만들고 처리해도 동작은 하지만, 이는 좋은 RESTful API 설계가 아니다.
기본적으로 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 상태와 함께 정상적으로 응답이 오는 걸 확인할 수 있다.
'Language > ASP.NET' 카테고리의 다른 글
ASP.NET에서 데이터 전송 및 상태 관리 방법 비교: ViewBag, Session, TempData.. (0) | 2024.11.02 |
---|---|
ASP.NET와 ASP.NET Core의 차이점 (0) | 2023.06.11 |
ASP.NET Core의 폴더 구조 (0) | 2023.06.11 |
ASP.NET에 대해 (0) | 2023.06.11 |