이번 시간 부터는 MVC의 기본기능 보다는 트러블 슈팅이나 , 팁에 대한 내용을 주로 다루어 보도록 하겠습니다.
MVC를 사용할 때 몇몇 개의 기능은 기존 ASP.NET Classic 보다 부족하다고 느껴질 수 있습니다. 특히나 사용자가 어떠한 페이지를 생성해야 할 때 반드시 그에 매칭되는 Action 을 만들어야 하하는 것 디자이너와의 협업에서 상당한 불편함을 가져올 수 있습니다. 이는 MVC 초반부터 항상 제기되어 오던 문제이며 , MVC의 개발상의 약점으로 손꼽히곤 했습니다. 이번시간에는 간단하게 나마 이러한 문제점들을 해결하기 위한 방법을 공유하고자 합니다.
HandleUnknownAction?
HandleUnknownAction 은 컨트롤러에서 Action 에 대한 요청을 받았을 때 해당 액션이 없으면 호출되는 메서드 입니다. 이 메서드가 구현되지 않았을 때 사용자는 다음과 같은 에러를 보게 됩니다.
[그림 : ActionResult 없기 때문에 404 에러를 반환하는 모습]
흔히 볼수 있는 404 Error 입니다. 하지만 Test폴더에는 여전히 Test.cshtml 이 존재하는 상태입니다. 이제 이것을 HandleUnknownAction 을 이용해서 나타나게 하겠습니다.
protected override void HandleUnknownAction(string actionName)
{
this.View(actionName).ExecuteResult(this.ControllerContext);
}
해당 메서드를 실행하게 되면 ActionName을 받았을 때 해당 컨트롤러를 이용해서 View를 즉 ActionResult 의 실행 없이 실행되게 됩니다.
[그림 : ActionResult 없이 View를 호출]
Summary
웹 개발에서 협업이라는 이슈는 가장 오래되고 진부하지만 중요한 이슈입니다. 그 중심에는 컴파일이라는 복병이 숨어 있게 되는데 , 이 문제 때문에 디자이너가 자신이 만든 파일을 볼수 없다면 이 또한 답답한 일일 것입니다. HandleUnknownAction은 이러한 문제를 해결하는데 아주 유용하며 , 또한 다른 에러를 처리하기도 용이합니다. 다음장에서는 ActionFilter 를 응용한 사례를 소개하도록 하겠습니다.
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
댓글 3
-
hskim618
2011.06.23 18:53
-
LoveCiel
2011.06.24 09:42
일전에 이 문제에 대해서 ASP.NET MVC팀 하고 이야기 한적이 있습니다. 그에 따른 해결책으로 제가 제시했던게
http://vsts2010.net/445 이 글인데 , MVC 팀도 이 기능에 대해서 상당히 긍정적인 반응을 보였습니다.
저 포스팅에서는 컨트롤러가 없어도 페이지를 생성하는 방법을 설명하고 있으니 , 참고 하셔도 좋을거 같습니다. ^^
-
hskim618
2011.06.24 14:21
알려주신 경로는 저도 검색하다가 봤어요.. 잘 이해는 못했지만요.. ^^;
제가 생각한 문제는 2가지에요..
하나는 Controller 메서드의 [Authorize]에서 권한 체크하기 때문에,
이 방법을 쓰면 권한 체크를 그냥 통과하게 되지 않을까하는 것이고요..
다른 하나는 해커가 어떤 방법을 통해서든 cshtml파일을 웹사이트 폴더쪽에 넣을 수 있다면
손쉽게 프로그램이 실행시킬 수 있는 방법이 생기는 것이라는 겁니다.
이건 html만 불러올 수 있게 한다면 큰 문제는 없을 것 같네요..
Action 메서드 없이 View 페이지를 불러오는 기능은 보안 위험이 있을 것 같은데요..
이에 대한 글을 한번 찾아봐야겠군요..
하지만 일단 매우 재밌는 생각이네요.. ^^