ASP.NET MVC - Controller(2)

Posted by 네버덜레스
2009.11.11 20:55 .NET/MVC Basic


지난 포스팅에서 말씀드린대로 이번에는 컨트롤러와 액션을 생성하는 법에 대해서 이야기를 나누려합니다.

컨트롤러의 생성

간단한 방법으로 컨트롤러를 생성해보겠습니다.
솔루션 탐색기의 Controllers 폴더에서 마우스 오른쪽 버튼 클릭 > Add > Controller 메뉴를 클릭합니다.


다음 그림과같이 Add Controller 라는 창이 뜹니다.


친철하게 이름만 변경하게끔 유도하네요. Default1을 Example 로 변경 후 Add 버튼을 클릭하도록 하겠습니다.
여기서 명심할 것은 Controller는 무조건 이름뒤에 Controller라고 붙여줘야합니다.
그래서 컨트롤러 생성시 이름을 줄때는 Example 이 아닌 ExampleController 로 생성하도록 합니다. 규약이니 반드시 지켜야겠죠?^^;
생성된 ExampleController의 소스입니다.


컨트롤러는 Controllers 폴더에 생성되는 것을 확인하실수 있습니다.
일부러 다른 곳에다 생성하시는 분들은 없겠죠? ASP.NET MVC의 관례를 깨뜨리면서까지의 작업은 사절입니다.^^;

스카폴딩(Scaffolding) 액션 메쏘

컨트롤러를 생성할때 CRUD(Creat, Read, Update, Delete) 기능을 하는 액션메쏘드를 자동적으로 생성할 수 있는 옵션이 있습니다. 다음의 옵션 선택이 이를 깔끔하게 처리해주죠^^


닷넷을 처음(?) 접해보는 저로서는 모든 것이 신기할 따름이네요^^;
이렇게 자동으로 생성된 메쏘드를 스텁(stub)메쏘드라고 하는데요. 우리에게 훌륭한 시작점을 제시하긴 하지만,,, 사실상의 로직들은 꼭 구현하셔야합니다.

컨트롤러에 액션 추가하기!

컨트롤러에 메쏘드를 추가하면 이것이 바로 액션이 됩니다.
액션에는 확실하게 짚고 넘어가야 할것이 있습니다. 이 노출된 액션이 주의해야할 사항이죠.
1. 반드시 public 으로 되어있어야합니다.
2. 정적인 메쏘드는 안됩니다.
3. 확장 메쏘드 안됩니다.
4. 생성자, 게터, 세터 메쏘드 안됩니다.
5. 제네릭 타입을 가질수 없습니다.
6. 컨트롤러 클래스(System.Web.Mvc.Controller)의 메쏘드 안됩니다.
7. ref 또는 out 파라미터를 포함할 수 없습니다.

여기서 한가지 더 볼것은 컨트롤러의 리턴타입에는 제한이 없다는 겁니다. 리턴타입이 string 이건 DateTime 이건 어떤 클래스의 인스턴스던 뭐던 간에 ASP.NET MVC 프레임웍은 action result가 아닌 리턴타입에 대해서는 string 으로 변환하여 브라우저에 출력하게 됩니다.(지난시간에 설명드렸었죠? ContentResult. ^^)
위 사항들을 위반하지 않고 메쏘드를 추가하게 되면 이 메쏘드는 액션메쏘드로 노출이 됩니다. 액션메쏘드는 누구나가 웹을 통해 접근할 수 있기 때문에 너무 퐝당한 메쏘드는 생성하면 안되죠. 이를테면 DeleteMyWebsite() 처럼요..^^;

퍼블릭 메쏘드를 노출시키고 싶지 않다?

컨트롤러 클래스에서 public으로 된 메쏘드를 만들었는데 이를 노출시키고 싶지 않다면
[NonAction] 애트리뷰트를 사용하세요^^


주소창에 /Example/TopSecret로 접근하려고 하면
 

찾을 수 없다는 에러메시지를 확인할 수 있습니다.

정말 하나하나 알아가는 즐거움은 참 크네요. 다음에는 View에 대해서 알아볼텐데요.. 후후
설레이네요^^

참고자료
http://www.asp.net/learn/mvc/tutorial-33-cs.aspx
http://www.asp.net/learn/mvc/tutorial-34-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
ASP.NET MVC - Controller(1)  (0) 2009.11.10
MVC - 그 첫시작  (1) 2009.11.06
이 댓글을 비밀 댓글로