작업 만들기(C#)

작성자: Microsoft

ASP.NET MVC 컨트롤러에 새 작업을 추가하는 방법을 알아봅니다. 메서드가 동작이 되기 위한 요구 사항에 대해 알아봅니다.

이 자습서의 목표는 새 컨트롤러 작업을 만드는 방법을 설명하는 것입니다. 작업 메서드의 요구 사항에 대해 알아봅니다. 메서드가 작업으로 노출되지 않도록 방지하는 방법도 알아봅니다.

컨트롤러에 작업 추가

컨트롤러에 새 메서드를 추가하여 컨트롤러에 새 작업을 추가합니다. 예를 들어 목록 1의 컨트롤러에는 Index()라는 작업과 SayHello()라는 작업이 포함됩니다. 두 메서드 모두 작업으로 노출됩니다.

목록 1 - Controllers\HomeController.cs

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

namespace MvcApplication1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        public string SayHello()
        {
            return "Hello!";
        }
    }
}

우주에 동작으로 노출되기 위해서는 메서드가 특정 요구 사항을 충족해야 합니다.

  • 메서드는 public이어야 합니다.
  • 메서드는 정적 메서드일 수 없습니다.
  • 메서드는 확장 메서드일 수 없습니다.
  • 메서드는 생성자, getter 또는 setter일 수 없습니다.
  • 메서드에 열려 있는 제네릭 형식이 있을 수 없습니다.
  • 메서드는 컨트롤러 기본 클래스의 메서드가 아닙니다.
  • 메서드는 ref 또는 out 매개 변수 포함할 수 없습니다.

컨트롤러 작업의 반환 형식에는 제한이 없습니다. 컨트롤러 작업은 문자열, DateTime, Random 클래스의 instance 또는 void를 반환할 수 있습니다. ASP.NET MVC 프레임워크는 작업 결과가 아닌 반환 형식을 문자열로 변환하고 문자열을 브라우저에 렌더링합니다.

이러한 요구 사항을 위반하지 않는 메서드를 컨트롤러에 추가하면 메서드가 컨트롤러 작업으로 노출됩니다. 여기서는 주의하세요. 컨트롤러 작업은 인터넷에 연결된 모든 사용자가 호출할 수 있습니다. 예를 들어 DeleteMyWebsite() 컨트롤러 작업을 만들지 마세요.

Public 메서드가 호출되지 않도록 방지

컨트롤러 클래스에서 public 메서드를 만들어야 하는데 메서드를 컨트롤러 작업으로 노출하지 않으려면 [NonAction] 특성을 사용하여 메서드가 호출되지 않도록 할 수 있습니다. 예를 들어 목록 2의 컨트롤러에는 [NonAction] 특성으로 데코레이팅된 CompanySecrets()라는 공용 메서드가 포함되어 있습니다.

목록 2 - Controllers\WorkController.cs

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    public class WorkController : Controller
    {
        [NonAction]
        public string CompanySecrets()
        {
            return "This information is secret.";
        }
    }
}

브라우저의 주소 표시줄에 /Work/CompanySecrets를 입력하여 CompanySecrets() 컨트롤러 작업을 호출하려고 하면 그림 1에서 오류 메시지가 표시됩니다.

NonAction 메서드 호출

그림 01: NonAction 메서드 호출(전체 크기 이미지를 보려면 클릭)