새 컨트롤러 추가

작성자: Rick Anderson

참고

이 자습서의 업데이트된 버전은 최신 버전의 Visual Studio를 사용하여 여기에서 사용할 수 있습니다. 새 자습서에서는 ASP.NET Core MVC를 사용하여 이 자습서에 비해 많은 개선 사항을 제공합니다.

이 자습서에서는 컨트롤러와 보기를 통해 ASP.NET Core MVC에 설명합니다. Razor Pages는 웹 UI를 더 쉽고 생산성을 높이는 페이지 기반 프로그래밍 모델인 ASP.NET Core 새로운 대안입니다. MVC 버전 이전의 Razor 페이지 자습서를 사용해 보는 것이 좋습니다. Razor 페이지 자습서:

  • 자습서 내용을 좀 더 쉽게 진행할 수 있습니다.
  • 더 많은 기능을 다룹니다.
  • 새 앱 개발에 선호되는 방법입니다.

MVC는 model-view-controller를 의미합니다. MVC는 잘 설계되고 테스트 가능하며 유지 관리하기 쉬운 애플리케이션을 개발하기 위한 패턴입니다. MVC 기반 애플리케이션에는 다음이 포함됩니다.

  • M odels: 애플리케이션의 데이터를 나타내고 유효성 검사 논리를 사용하여 해당 데이터에 대한 비즈니스 규칙을 적용하는 클래스입니다.
  • V iews: 애플리케이션이 HTML 응답을 동적으로 생성하는 데 사용하는 템플릿 파일입니다.
  • C ontrollers: 들어오는 브라우저 요청을 처리하고, 모델 데이터를 검색한 다음, 브라우저에 응답을 반환하는 보기 템플릿을 지정하는 클래스입니다.

이 자습서 시리즈에서는 이러한 모든 개념을 다루며 이를 사용하여 애플리케이션을 빌드하는 방법을 보여 줍니다.

먼저 컨트롤러 클래스를 만들어 보겠습니다. 솔루션 탐색기Controllers 폴더를 마우스 오른쪽 단추로 클릭한 다음 추가, 컨트롤러를 차례로 클릭합니다.

솔루션 탐색기 창을 보여 주는 스크린샷 컨트롤러가 마우스 오른쪽 단추로 클릭 메뉴와 하위 추가 메뉴가 열려 있습니다.

스캐폴드 추가 대화 상자에서 MVC 5 컨트롤러 - 비어 있음을 클릭한 다음 추가를 클릭합니다.

스캐폴드 추가 대화 상자를 보여 주는 스크린샷 M V C 5 컨트롤러 비어 있음이 선택되었습니다.

새 컨트롤러의 이름을 "HelloWorldController"로 지정하고 추가를 클릭합니다.

컨트롤러 추가

솔루션 탐색기HelloWorldController.cs라는 새 파일과 Views\HelloWorld라는 새 폴더가 만들어졌습니다. 컨트롤러가 IDE에서 열려 있습니다.

열려 있는 헬로 월드 컨트롤러 점 c의 탭을 보여 주는 스크린샷 솔루션 탐색기 헬로 월드 컨트롤러 점 c의 하위 폴더와 헬로 월드 하위 폴더가 빨간색 원으로 표시됩니다.

파일 내용을 다음 코드로 바꿉니다.

using System.Web;
using System.Web.Mvc; 
 
namespace MvcMovie.Controllers 
{ 
    public class HelloWorldController : Controller 
    { 
        // 
        // GET: /HelloWorld/ 
 
        public string Index() 
        { 
            return "This is my <b>default</b> action..."; 
        } 
 
        // 
        // GET: /HelloWorld/Welcome/ 
 
        public string Welcome() 
        { 
            return "This is the Welcome action method..."; 
        } 
    } 
}

컨트롤러 메서드는 HTML 문자열을 예제로 반환합니다. 컨트롤러의 이름이 지정 HelloWorldController 되고 첫 번째 메서드의 이름은 Index입니다. 브라우저에서 호출해 보겠습니다. 애플리케이션을 실행합니다(F5 또는 Ctrl+F5 누르기). 브라우저에서 주소 표시줄의 경로에 "HelloWorld"를 추가합니다. (예를 들어 아래 그림에서는 )입니다 http://localhost:1234/HelloWorld.. 브라우저의 페이지는 다음 스크린샷과 같습니다. 위의 메서드에서 코드는 문자열을 직접 반환했습니다. 당신은 단지 몇 가지 HTML을 반환하는 시스템을 말했다, 그것은했다!

창에 내 기본 작업이라는 텍스트가 있는 로컬 호스트 탭을 보여 주는 스크린샷

ASP.NET MVC는 들어오는 URL에 따라 다른 컨트롤러 클래스(및 그 안에 있는 다른 작업 메서드)를 호출합니다. ASP.NET MVC에서 사용하는 기본 URL 라우팅 논리는 다음과 같은 형식을 사용하여 호출할 코드를 결정합니다.

/[Controller]/[ActionName]/[Parameters]

App_Start/RouteConfig.cs 파일에서 라우팅 형식을 설정합니다.

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

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

애플리케이션을 실행하고 URL 세그먼트를 제공하지 않으면 기본값은 "Home" 컨트롤러 및 위의 코드의 기본값 섹션에 지정된 "Index" 작업 메서드로 설정됩니다.

URL의 첫 번째 부분에서는 실행할 컨트롤러 클래스를 결정합니다. 따라서 /HelloWorld 는 클래스에 매핑합니다 HelloWorldController . URL의 두 번째 부분에서는 실행할 클래스의 작업 메서드를 결정합니다. 따라서 /HelloWorld/Index 를 사용하면 Index 클래스의 메서드가 HelloWorldController 실행됩니다. /HelloWorld로만 이동하면 되며 메서드가 Index 기본적으로 사용되었습니다. 라는 Index 메서드가 명시적으로 지정되지 않은 경우 컨트롤러에서 호출되는 기본 메서드이기 때문입니다. URL 세그먼트의 세 번째 부분(Parameters)은 경로 데이터입니다. 이 자습서의 뒷부분에서 경로 데이터를 볼 수 있습니다.

http://localhost:xxxx/HelloWorld/Welcome 로 이동합니다. Welcome 메서드는 "시작 작업 메서드입니다..."라는 문자열을 실행하고 반환합니다. 기본 MVC 매핑은 입니다 /[Controller]/[ActionName]/[Parameters]. 이 URL의 경우 컨트롤러는 HelloWorld이고 Welcome이 작업 메서드입니다. 아직 URL의 [Parameters] 부분을 사용하지 않았습니다.

창에 시작 작업 메서드라는 텍스트가 있는 로컬 호스트 탭을 보여 주는 스크린샷

URL의 일부 매개 변수 정보를 컨트롤러에 전달할 수 있도록 예제를 약간 수정해 보겠습니다(예: /HelloWorld/Welcome?name=Scott&numtimes=4). 아래와 같이 두 개의 매개 변수를 포함하도록 메서드를 변경합니다 Welcome . 코드는 C# 선택적 매개 변수 기능을 사용하여 해당 매개 변수에 대해 값이 numTimes 전달되지 않으면 매개 변수가 기본값 1로 설정되어야 함을 나타냅니다.

public string Welcome(string name, int numTimes = 1) {
     return HttpUtility.HtmlEncode("Hello " + name + ", NumTimes is: " + numTimes);
}

참고

보안 참고: 위의 코드는 HttpUtility.HtmlEncode 를 사용하여 악의적인 입력(즉, JavaScript)으로부터 애플리케이션을 보호합니다. 자세한 내용은 방법: 문자열에 HTML 인코딩을 적용하여 웹 애플리케이션의 스크립트 악용으로부터 보호를 참조하세요.

애플리케이션을 실행하고 예제 URL(http://localhost:xxxx/HelloWorld/Welcome?name=Scott&numtimes=4)으로 이동합니다. URL에서 namenumtimes에 다른 값을 사용할 수 있습니다. ASP.NET MVC 모델 바인딩 시스템은 주소 표시줄의 쿼리 문자열에서 명명된 매개 변수를 메서드의 매개 변수에 자동으로 매핑합니다.

U R L 로컬 호스트 콜론 1 2 3 4 슬래시 헬로 월드 슬래시 시작 물음표 이름이 Scott과 같고 num 시간이 4인 브라우저 창을 보여주는 스크린샷. 창의 텍스트는 Hello Scott Num Times가 4입니다.

위의 샘플에서 URL 세그먼트( ) Parameters는 사용되지 name 않으며 및 numTimes 매개 변수는 쿼리 문자열로 전달됩니다. ?는 위 URL의 (물음표)는 구분 기호이며 쿼리 문자열은 다음과 같습니다. & 문자는 쿼리 문자열을 구분합니다.

Welcome 메서드를 다음 코드로 바꿉다.

public string Welcome(string name, int ID = 1)
{
    return HttpUtility.HtmlEncode("Hello " + name + ", ID: " + ID);
}

애플리케이션을 실행하고 다음 URL을 입력합니다. http://localhost:xxx/HelloWorld/Welcome/1?name=Scott

U R L 로컬 호스트 콜론 1 2 3 4 슬래시 헬로 월드 슬래시 슬래시 시작 슬래시 1 물음표 이름이 scott과 같은 브라우저 창을 보여주는 스크린샷. 창의 텍스트는 Hello Scott ID 1입니다.

이번에는 세 번째 URL 세그먼트가 경로 매개 변수 ID.Welcome 와 일치했습니다. 작업 메서드에는 메서드의 URL 사양과 일치하는 매개 변수(ID)가 RegisterRoutes 포함되어 있습니다.

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

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

ASP.NET MVC 애플리케이션에서는 매개 변수를 쿼리 문자열로 전달하는 것보다 매개 변수를 경로 데이터로 전달하는 것이 더 일반적입니다(위의 ID와 같이). URL의 경로 데이터로 및 numtimes 를 매개 변수에 모두 name 전달하는 경로를 추가할 수도 있습니다. App_Start\RouteConfig.cs 파일에서 "Hello" 경로를 추가합니다.

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 = "Home", action = "Index", id = UrlParameter.Optional }
      );

      routes.MapRoute(
           name: "Hello",
           url: "{controller}/{action}/{name}/{id}"
       );
   }
}

애플리케이션을 실행하고 로 이동합니다 /localhost:XXX/HelloWorld/Welcome/Scott/3.

U R L 로컬 호스트 콜론이 있는 브라우저 창을 보여 주는 스크린샷 1 2 3 4 슬래시 헬로 월드 슬래시 슬래시 시작 슬래시 Scott 슬래시 3. 창의 텍스트는 Hello Scott ID 3입니다.

많은 MVC 애플리케이션의 경우 기본 경로가 정상적으로 작동합니다. 이 자습서의 뒷부분에서 모델 바인더를 사용하여 데이터를 전달하는 방법을 알아보고 기본 경로를 수정할 필요가 없습니다.

이러한 예제에서 컨트롤러는 MVC의 "VC" 부분, 즉 보기 및 컨트롤러가 작동합니다. 컨트롤러가 HTML을 직접 반환하고 있습니다. 일반적으로 컨트롤러가 HTML을 직접 반환하는 것은 코드에 매우 번거롭기 때문에 원하지 않습니다. 대신 일반적으로 별도의 보기 템플릿 파일을 사용하여 HTML 응답을 생성합니다. 다음으로 이 작업을 수행하는 방법을 살펴보겠습니다.