ASP.NET MVC - Controller(1)

예제를 진행하기에 앞서 이번에는 MVC에서 C를 담당하고 있는 컨트롤러에 대해 얘기를 나누려 합니다.^^
군소리 없이 빠르게(?) 진행하도록 하겠습니다.

컨트롤러?

MVC에서의 컨트롤러는 ASP.NET MVC로 만들어진 웹사이트에서의 요청건에 대한 응답을 담당합니다. 개개의 요청은 개개의 컨트롤러와 매핑이 되죠.
예를 들어 다음의 URL http://localhost/Product/Index/3 로 요청을 하면 ProductController를 호출하게 됩니다. ProductController가 이 요청에 대한 응답을 해야하죠.
ProductController의 내용을 잠깐 보게되면


Controller 클래스에서 파생된 간단한 클래스네요.
ASP.NET MVC 웹사이트의 요청에 응답해줄 컨트롤러를 상속받았으니 이 클래스의 유용한 메쏘드들을 자연스럽게 사용할 수 있겠죠? ㅎㅎ
http://localhost/Product/Index/3 이렇게 입력하게 됐을때, ProductController 가 이 요청건을 담당하게 되고 Index()를 호출하게 됩니다.
이 URL 패턴은 Global.asax에 정의되어 있습니다.

Global.asax 간략소개


처음 애플리케이션이 시작이 되면 Application_Start()가 실행이 됩니다.
그러면 RouteTable.Routes 라는 RouteCollection 개체에 라우팅 설정 정보를 추가하게 됩니다.
MapRoute()가 그 일을 하죠.
소스를 보시면 Default 라는 이름으로 URL과 디폴트값을 세팅해서 추가하는 것을 보실 수 있습니다.
그래서 http://localhost/Product/Index/3 주소는 {controller}/{action}/{id} 과 매핑이 되어 ProductController의 3을 파라미터로 받는 액션메쏘드 Index를 호출하게 되는거죠.
이제 아시겠지만, http://localhost 라고 입력해도 디폴트값인 HomeController 의 Index 액션메쏘드를 호출하게 됩니다.(액션메쏘드는 컨트롤러에서 public 으로 제공되는 메쏘드를 의미합니다.)

Action Result 형식

Product 컨트롤러의 Index() 메쏘드의 반환형을 보면 ActionResult로 되어있습니다.
컨트롤러는 action result라고 불리는 action을 리턴합니다.
이 action result에는 몇가지 타입이 있는데 다음과 같습니다.

1.ViewResult – 뷰(HTML) 렌더링
2.EmptyResult – 아무것도 암함
3.RedirectResult – 새로운 URL로 리다이렉트
4.JsonResult – AJAX 애플리케이션에서 사용될 수 있는 JSON 반환
5.JavaScriptResult – 자바스크립트 반환
6.ContentResult – 텍스트 데이터 반환
7.FileContentResult – 파일반환(이진데이터).
8.FilePathResult – 파일반환(파일패스)
9.FileStreamResult – 파일반환(파일스트림)

이 action result 는 Controller 클래스의 메쏘드로 대신하여 사용됩니다.

1.View – ViewResult 반환
2.Redirect – RedirectResult 반환
3.RedirectToAction – RedirectToRouteResult 반환
4.RedirectToRoute – RedirectToRouteResult 반환
5.Json – JsonResult 반환
6.JavaScriptResult – JavaScriptResult 반환
7.Content – ContentResult 반환
8.File – 파라미터에 따른 FileContentResult, FilePathResult, FileStreamResult 반환

자. 다음 예제를 잠깐 살펴볼까요?


Content(이것은 ContentResult를 대신합니다)는 View()처럼 html을 리턴하는 것이 아닌 string 을 리턴하게 됩니다. 출력된 결과물을 보면


ㅎㅎ. 단지 텍스트만 출력이 되네요. (주소에 Index를 입력안해도 원하는 결과를 얻을 수 있는건 Global.asax 에 디폴트값으로 Index가 설정되어있기 때문이죠^^)
Index() 메쏘드를 다음과 같이 소스를 수정해도 같은 결과가 출력되는 것을 확인하실 수 있습니다.


ActionResult 가 아닌 것(int, string, DateTime...)을 리턴하게 되면 자동적으로 ContentResult로 감싸서 리턴하게 됩니다.
이번 장은 이걸로 마치고요, 다음은 컨트롤러의 생성과 액션메쏘드에 대해서 알아보겠습니다.

참고자료
http://www.asp.net/learn/mvc/tutorial-03-cs.aspx

'.NET > MVC Basic' 카테고리의 다른 글

ASP.NET MVC - View(3)  (0) 2009.12.02
ASP.NET MVC - View(2)  (0) 2009.11.30
ASP.NET MVC - View(1)  (2) 2009.11.23
ASP.NET MVC - Controller(2)  (0) 2009.11.11
MVC - 그 첫시작  (1) 2009.11.06