본문 바로가기

WEB/ASP.NET

[ASP.NET 공부] ASP.NET 4.6 MVC 프레임워크(복습) - 짱우의 코딩일기 - 티스토리

반응형

  책으로 공부하다가 다시 MVC 프레임워크에 대해 복습을 해봐야겠다 라는 생각이 들어 MVC 관련 내용을 다시 정리해보았다.


MVC 복습

MVC 폴더

  • App_Data : LocalDB, .mdf 파일, xml 파일 등 데이터 파일들을 저장해둔다.
  • App_Start : 클래스 파일들이 있고 애플리케이션이 시작될 때 실행된다.
  • Content : css 파일이나 이미지, 아이콘 파일들을 담아둔다.
  • Controllers : 사용자의 요청과 응답에 대한 처리를 하는 부분이다.
  • fonts : 말 그대로 폰트를 모아두는 곳이다.
  • Models : 애플리케이션 데이터를 관리해준다.
  • Scripts : JS 파일들을 모아둔다.
  • Views : html 파일들을 모아두는 곳이고 보통 HTML과 C# 코드를 사용할 수 있게 해주는 .cshtml 파일이 담겨져있다.

 

Routing in MVC

  ASP.NET 웹 폼에서는 모든 URL과 .aspx 파일 이름이 매칭이 되야한다. 하지만 MVC에서는 html 파일 이름과 URL 주소가 같을 필요가 없다.

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Task", action = "Index", id = UrlParameter.Optional }
        );
    }
}
  • routes.MapRoute : route를 설정해주는 메서드다.
    • name : "Default" => route 이름
    • url : "{controller}/{action}/{id}" => URL 패턴을 의미한다.

  처음 책 예제를 따라하면서 공부했을 때 프로젝트 루트 경로에 Task라는 폴더가 없는데 어떻게 HTML이 실행이 되는지 이해가 가지 않았는데 RouteConfig.cs 파일에 url이 "{controller}/{action}..." 으로 설정되어 있었기 때문에 위와 같이 URL을 입력했을 때 HTML이 실행이 된 것이었다.

  컨트롤러 이름은 Controller 앞에 있는 Task 다.

// 할 일 목록 표시
public ActionResult Index()
{
    // 리스트 출력
    var r = repo.GetTasks();

    return View(r);
}

  그리고 컨트롤러 내에 메서드 이름이 Index 인 것이 있는데 {controller}/{action} 순서이기 때문에 메서드가 올 차례라 Index 메서드가 호출이 된 것이다. 위의 코드를 보면 해당 View를 뿌려주는 코드를 확인할 수 있다.

 

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
    name: "Student",
    url: "students/{id}",
    defaults: new { controller = "Student", action = "Index" }
     );

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

  위의 코드처럼 URL에 컨트롤러 이름을 지정해서 '도메인주소/students'로 사용자가 요청하게 되면 해당 컨트롤러로 넘어가게 할 수 있다.

  Routing 설정이 모두 끝난 후 프로젝트 루트 경로에 있는 'Global.asax' 파일에서 Application_Start 메서드에 Routing 한 것을 등록해야 한다.

 

Controller

  • Controller는 들어오는 URL 요청을 처리하는 역할을 한다.
  • Controller 클래스는 'Action Method'라 불리는 public method를 포함한다.
  • 모든 Controller 클래스 이름은 Controller로 끝나야 한다.
  • 모든 Controller 클래스의 위치는 Controller 폴더 안에 있어야 한다.

Controller 만들어보기

  위와 같은 Controller를 만들어 본다.

  이름은 다음과 같이 만들어준다.

 

Action Method

  • Action Method는 모두 다 public으로 선언되야 한다.
  • Action Method는 오버로딩이 불가능하다.

Action Selectors

  Action Selector는 Action Method에 적용할 수 있는 속성이다. Routing Engine이 정확한 Action Method를 선택할 수 있도록 도와주는 역할을 한다. Action Selector 속성은 다음과 같다.

  • ActionName
  • NonAction
  • ActionVerbs

ActionName

  ActionName 속성을 통해 메서드 이름과 다른 Action Name으로 지정할 수 있다.

public class StudentController : Controller
{
    // GET: Student
    public ActionResult Index()
    {
        return View();
    }

    //[ActionName("Test")]
    public string SecondIndex ()
    {
        return "테스트입니당";
    }
}

  위의 코드는 ActionName 속성을 주석처리해서 활성화시키지 않은 상태다. 위의 코드대로 빌드했을 때 SecondIndex() 액션 메서드를 실행시키고 싶으면 URL에 /Student/SecondIndex라 입력해야 한다.

  ActionName이 주석처리 되어 있기 때문에 될리는 없지만 위와 같이 URL을 입력했을 때 역시나 404 에러가 뜬다.

// GET: Student
public ActionResult Index()
{
    return View();
}

[ActionName("Test")]
public string SecondIndex ()
{
    return "테스트입니당";
}

  위의 코드는 ActionName 속성에 주석처리를 제거한 코드다.

  위의 화면처럼 test로 URL을 입력해도 해당 페이지가 뜨는 것을 확인할 수 있다.

 

NonAction

  NonAction selector 속성은 컨트롤러의 public method가 action method가 아니라고 정의해주는 역할을 한다.

[NonAction]
public Student GetStudent(int id)
{
    return studentList.Where(s => s.StudentId == id).FirstOrDefault();
}

  위의 코드처럼 학생목록을 불러오고 싶을 때에는 action method일 필요는 없다. 이런 상황에 NonAction 속성을 사용한다.

 

ActionVerbs

  • ActionVerbs는 POST, GET, PUT 등 HTTP Method를 사용할 수 있게 하는 속성이다.
반응형