MVC의 ActionResult는 MVC에서 보내질 View의 형태를 결정하는 것으로써 이것을 정복하는 것 만으로도 MVC를 어느정도 능숙하게 다룰수 있을것이라고 기대할수 있다. 이번장에서는 MVC에서 주요하게 사용되는 ActionResult 를 상속받는 구현 객체들에 대한 이야기를 풀어보도록  하겠다.

 

ActionResult 의 원형


public abstract class ActionResult { 
        public abstract void ExecuteResult(ControllerContext context); 
}

[코드 : ActionResult 의 원형]

 

 

위에서 살펴볼수 있듯이 이것은 단지 ExecuteResult를 호출하는 아주 간단한 추상 클래스이다. 이 메서드는 해당 컨트롤러 컨텍스트를 전달 받는데 , 이는 사 모든 http 서버측 객체에 접근할수 있다는 것을 의미하며 , 또한 해당 컨트롤러를 참조할수 있다는 것을 의미한다.

 

다음과 같은 객체들이 ActionResult 를 상속받아 구현된다.

System.Web.Mvc.ContentResult
ASP.NET 의 Response.Write와 같은 기능을 한다. Content(); 에 전달되는 인자를 그대로 출력한다.


System.Web.Mvc.EmptyResult
메서드명과 같이 아무것도 반환하지 않는다.


System.Web.Mvc.FileResult
Stream 형태로 해당 뷰를 반환한다.


System.Web.Mvc.HttpUnauthorizedResult
권한이 없는 http 오류코드(401) 를 리턴한다


System.Web.Mvc.HttpStatusCodeResult
각종 http 상태코드를 반환한다


System.Web.Mvc.JavaScriptResult
자바스크립트 형태의 Stream 을 리턴한다.


System.Web.Mvc.JsonResult
Json 형태의 Stream을 리턴한다 ContextType 은 (text/json)이다.


System.Web.Mvc.RedirectResult
해당 페이지로 리다이렉트 한다 ASP.NET Classic 의 Response.Redirect 와 동일하다.


System.Web.Mvc.RedirectToRouteResult
해당 MVC안의 라우팅 되는 페이지로 리다이렉트 한다.


System.Web.Mvc.ViewResultBase
해당 뷰를 렌더링한다. 때에 따라 View로 Model 을 보내거나 , View로 사용할 페이지를 지정할수 있다.



이렇게 여러가지 ActionResult가 있지만 실질적으로 고유한 Result는 ContentResult 와 ViewResult, RedirectResult ,JsonResult, HttpStatusCodeResult ,그리고 FileResult 정도이다. 다른 리턴값은 단지 아래의 클래스를 래핑해서 사용자가 좀더 이용하기 쉽게 만들었을 뿐이다.
예를들어 HttpStatusCodeResult 와 HttpUnauthorizedResult를 살펴보도록 하자.

 

public ActionResult Index(Int32 id )
{
     if (id == 401)
     {
         return new HttpUnauthorizedResult();
     }
     return new HttpStatusCodeResult(id);
}

[코드 : UnauthorizedResult]


위의 코드는 각종 상태코드를 그대로 리턴하도록 만들어진 예제이다. 간단하게 파라미터에 int 값을 삽입하여 그것이 결과값으로 나오게 된다.

 

9_1.png
[그림 HttpUnauthorizedResult 를 호출하였을때이다. 401 Error 이 발생한다.]

 

9_2.png
[그림 HttpStatusCode를 호출하였을 때 이다. 실제 12345라는 리턴값은 존재하지 않는다.]

 

 

Summary
이번장에서는 MVC에 대한 ActionResult 의 종류에 대해서 알아보았다. 각각의 ActionResult는 주요한 웹 기능을 수행하는데 쓰인다. 예를들면 HttpUnauthorizedResult는 의도적으로 사용자에게 인증을 받을것을 유도하여 로그인 페이지로 보낸다. Json 은 Stream 을 Json 포멧으로 포팅하여 Json Stream 을 호출한것처럼 보이게 한다. View를 통해 컨텐츠를 보내고 싶다면 간단하게 ViewResult 를 사용하면 된다. ActionResult를 이해하는 것은 MVC를 이용해 좀더 고급 컨텐츠를 만들기 위한 기본바탕이니 꼭 숙지 하기 바란다.




ASP.NET MVC3 시리즈 강좌 리스트
[ASP.NET MVC3강좌] 1. MVC(Model- View – Controller) 란 무엇인가.
[ASP.NET MVC3강좌] 2. MVC 환경 세팅
[ASP.NET MVC3강좌] 3. HelloWorld MVC
[ASP.NET MVC3강좌] 4. Layout , Partial Page
[ASP.NET MVC3강좌] 5. Model 을 View에서 표현하기
[ASP.NET MVC3강좌] 6. MVC의 매력적인 기능 스캐폴딩!(With EF)
[ASP.NET MVC3강좌] 7. 유효성 검사
[ASP.NET MVC3강좌] 8. ModelBinder
[ASP.NET MVC3강좌] 9. MVC ActionResult 종류 살펴보기
[ASP.NET MVC3강좌] 10. MVC 처리 프로세스 & ActionFilter
[ASP.NET MVC3강좌] 11. Global.asax
[ASP.NET MVC3강좌] 12. (번외편) Repository Pattern
[ASP.NET MVC3강좌] 13. MEF(Managed Extensibility Framework) in MVC
[ASP.NET MVC3강좌] 14. Javascript in MVC
[ASP.NET MVC3강좌] 15. Javascript Intellicense in Visual Studio
[ASP.NET MVC3강좌] 16. JSON in MVC - 1
[ASP.NET MVC3강좌] 17. JSON in MVC - 2
[ASP.NET MVC3강좌] 18. HTML5 in MVC
[ASP.NET MVC3강좌] 19. MVC Tips 1 - HandleUnknownAction
[ASP.NET MVC3강좌] 20. MVC Tips 2 - Cache ActionFilter





profile

ASP.NET MVP 2009~2011