다음을 통해 공유


ASP.NET MVC 컨트롤러 개요(C#)

작성 자: Stephen Walther

이 자습서에서는 Stephen Walther가 MVC 컨트롤러를 ASP.NET 소개합니다. 새 컨트롤러를 만들고 다양한 유형의 작업 결과를 반환하는 방법을 알아봅니다.

이 자습서에서는 ASP.NET MVC 컨트롤러, 컨트롤러 작업 및 작업 결과의 항목을 살펴봅니다. 이 자습서를 완료한 후 컨트롤러를 사용하여 방문자가 ASP.NET MVC 웹 사이트와 상호 작용하는 방식을 제어하는 방법을 이해하게 됩니다.

컨트롤러 이해

MVC 컨트롤러는 ASP.NET MVC 웹 사이트에 대한 요청에 응답할 책임이 있습니다. 각 브라우저 요청은 특정 컨트롤러에 매핑됩니다. 예를 들어 브라우저의 주소 표시줄에 다음 URL을 입력한다고 상상해 보세요.

http://localhost/Product/Index/3

이 경우 ProductController라는 컨트롤러가 호출됩니다. ProductController는 브라우저 요청에 대한 응답을 생성합니다. 예를 들어 컨트롤러는 특정 보기를 브라우저로 다시 반환하거나 컨트롤러가 사용자를 다른 컨트롤러로 리디렉션할 수 있습니다.

목록 1에는 ProductController라는 간단한 컨트롤러가 포함되어 있습니다.

Listing1 - Controllers\ProductController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;

namespace MvcApplication1.Controllers
{
    public class ProductController : Controller
    {
        //
        // GET: /Products/

        public ActionResult Index()
        {
            // Add action logic here
            return View();
        }
    }
}

목록 1에서 볼 수 있듯이 컨트롤러는 클래스(Visual Basic .NET 또는 C# 클래스)에 불과합니다. 컨트롤러는 기본 System.Web.Mvc.Controller 클래스에서 파생되는 클래스입니다. 컨트롤러는 이 기본 클래스에서 상속되므로 컨트롤러는 몇 가지 유용한 메서드를 무료로 상속합니다(잠시 후 이러한 메서드에 대해 설명합니다).

컨트롤러 작업 이해

컨트롤러는 컨트롤러 작업을 노출합니다. 작업은 브라우저 주소 표시줄에 특정 URL을 입력할 때 호출되는 컨트롤러의 메서드입니다. 예를 들어 다음 URL을 요청한다고 상상해 보세요.

http://localhost/Product/Index/3

이 경우 ProductController 클래스에서 Index() 메서드가 호출됩니다. Index() 메서드는 컨트롤러 작업의 예입니다.

컨트롤러 작업은 컨트롤러 클래스의 공용 메서드여야 합니다. 기본적으로 C# 메서드는 프라이빗 메서드입니다. 컨트롤러 클래스에 추가하는 모든 공용 메서드가 컨트롤러 작업으로 자동으로 노출됨을 인식합니다(브라우저 주소 표시줄에 올바른 URL을 입력하기만 하면 우주의 모든 사용자가 컨트롤러 작업을 호출할 수 있으므로 주의해야 합니다).

컨트롤러 작업에서 충족해야 하는 몇 가지 추가 요구 사항이 있습니다. 컨트롤러 작업으로 사용되는 메서드는 오버로드할 수 없습니다. 또한 컨트롤러 작업은 정적 메서드일 수 없습니다. 그 외에는 거의 모든 메서드를 컨트롤러 작업으로 사용할 수 있습니다.

작업 결과 이해

컨트롤러 작업은 작업 결과라는 항목을 반환합니다. 작업 결과는 브라우저 요청에 대한 응답으로 컨트롤러 작업이 반환하는 것입니다.

ASP.NET MVC 프레임워크는 다음을 비롯한 여러 유형의 작업 결과를 지원합니다.

  1. ViewResult - HTML 및 태그를 나타냅니다.
  2. EmptyResult - 결과를 나타내지 않습니다.
  3. RedirectResult - 새 URL로의 리디렉션을 나타냅니다.
  4. JsonResult - AJAX 애플리케이션에서 사용할 수 있는 JavaScript 개체 표기법 결과를 나타냅니다.
  5. JavaScriptResult - JavaScript 스크립트를 나타냅니다.
  6. ContentResult - 텍스트 결과를 나타냅니다.
  7. FileContentResult - 다운로드 가능한 파일(이진 콘텐츠 포함)을 나타냅니다.
  8. FilePathResult - 다운로드 가능한 파일(경로 포함)을 나타냅니다.
  9. FileStreamResult - 다운로드 가능한 파일(파일 스트림 포함)을 나타냅니다.

이러한 모든 작업 결과는 기본 ActionResult 클래스에서 상속됩니다.

대부분의 경우 컨트롤러 작업은 ViewResult를 반환합니다. 예를 들어 목록 2의 인덱스 컨트롤러 작업은 ViewResult를 반환합니다.

목록 2 - Controllers\BookController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;

namespace MvcApplication1.Controllers
{
    public class BookController : Controller
    {
        public ActionResult Index()
        {
            // Add action logic here
            return View();
        }
    }
}

작업이 ViewResult를 반환하면 HTML이 브라우저로 반환됩니다. 목록 2의 Index() 메서드는 브라우저에 Index라는 뷰를 반환합니다.

목록 2의 Index() 작업은 ViewResult()를 반환하지 않습니다. 대신 컨트롤러 기본 클래스의 View() 메서드가 호출됩니다. 일반적으로 작업 결과를 직접 반환하지 않습니다. 대신 컨트롤러 기본 클래스의 다음 메서드 중 하나를 호출합니다.

  1. 보기 - ViewResult 작업 결과를 반환합니다.
  2. 리디렉션 - RedirectResult 작업 결과를 반환합니다.
  3. RedirectToAction - RedirectToRouteResult 작업 결과를 반환합니다.
  4. RedirectToRoute - RedirectToRouteResult 작업 결과를 반환합니다.
  5. Json - JsonResult 작업 결과를 반환합니다.
  6. JavaScriptResult - JavaScriptResult를 반환합니다.
  7. Content - ContentResult 작업 결과를 반환합니다.
  8. 파일 - 메서드에 전달된 매개 변수에 따라 FileContentResult, FilePathResult 또는 FileStreamResult를 반환합니다.

따라서 View를 브라우저로 반환하려면 View() 메서드를 호출합니다. 한 컨트롤러 작업에서 다른 컨트롤러 작업으로 사용자를 리디렉션하려는 경우 RedirectToAction() 메서드를 호출합니다. 예를 들어 목록 3의 Details() 작업은 Id 매개 변수에 값이 있는지 여부에 따라 뷰를 표시하거나 Index() 작업으로 사용자를 리디렉션합니다.

목록 3 - CustomerController.cs

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    public class CustomerController : Controller
    {
        public ActionResult Details(int? id)
        {
            if (!id.HasValue)
                return RedirectToAction("Index");

            return View();
        }

        public ActionResult Index()
        {
            return View();
        }

    }
}

ContentResult 작업 결과는 특별합니다. ContentResult 작업 결과를 사용하여 작업 결과를 일반 텍스트로 반환할 수 있습니다. 예를 들어 목록 4의 Index() 메서드는 메시지를 HTML이 아닌 일반 텍스트로 반환합니다.

목록 4 - Controllers\StatusController.cs

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    public class StatusController : Controller
    {
        public ActionResult Index()
        {
            return Content("Hello World!");
        }
    }
}

StatusController.Index() 작업이 호출되면 뷰가 반환되지 않습니다. 대신 원시 텍스트 "헬로 월드!"이 브라우저로 반환됩니다.

컨트롤러 작업이 작업 결과가 아닌 결과(예: 날짜 또는 정수)를 반환하는 경우 결과는 ContentResult에 자동으로 래핑됩니다. 예를 들어 목록 5에서 WorkController의 Index() 작업이 호출되면 날짜가 ContentResult로 자동으로 반환됩니다.

목록 5 - WorkController.cs

using System;
using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    public class WorkController : Controller
    {
        public DateTime Index()
        {
            return DateTime.Now;
        }
    }
}

목록 5의 Index() 작업은 DateTime 개체를 반환합니다. ASP.NET MVC 프레임워크는 DateTime 개체를 문자열로 변환하고 ContentResult에서 DateTime 값을 자동으로 래핑합니다. 브라우저는 날짜와 시간을 일반 텍스트로 받습니다.

요약

이 자습서의 목적은 ASP.NET MVC 컨트롤러, 컨트롤러 작업 및 컨트롤러 작업 결과의 개념을 소개하는 것이었습니다. 첫 번째 섹션에서는 ASP.NET MVC 프로젝트에 새 컨트롤러를 추가하는 방법을 알아보았습니다. 다음으로 컨트롤러의 공용 메서드가 컨트롤러 동작으로 우주에 노출되는 방법을 알아보았습니다. 마지막으로 컨트롤러 작업에서 반환할 수 있는 다양한 유형의 작업 결과에 대해 설명했습니다. 특히 컨트롤러 작업에서 ViewResult, RedirectToActionResult 및 ContentResult를 반환하는 방법에 대해 설명했습니다.