작업 만들기(C#)Creating an Action (C#)

로 마이크로 소프트by Microsoft

ASP.NET MVC 컨트롤러에 새 작업을 추가하는 방법에 대해 알아봅니다.Learn how to add a new action to an ASP.NET MVC controller. 메서드가 작업으로 수행되는 데 대한 요구 사항에 대해 알아봅니다.Learn about the requirements for a method to be an action.

이 자습서의 목표는 새 컨트롤러 작업을 만드는 방법을 설명하는 것입니다.The goal of this tutorial is to explain how you can create a new controller action. 작업 메서드의 요구 사항에 대해 알아봅니다.You learn about the requirements of an action method. 메서드가 작업으로 노출되는 것을 방지하는 방법도 알아봅니다.You also learn how to prevent a method from being exposed as an action.

컨트롤러에 작업 추가Adding an Action to a Controller

컨트롤러에 새 메서드를 추가하여 컨트롤러에 새 작업을 추가합니다.You add a new action to a controller by adding a new method to the controller. 예를 들어 목록 1의 컨트롤러에는 Index()라는 작업과 SayHello()라는 작업이 포함됩니다.For example, the controller in Listing 1 contains an action named Index() and an action named SayHello(). 두 메서드 모두 작업으로 노출됩니다.Both methods are exposed as actions.

목록 1 - 컨트롤러\HomeController.csListing 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!";
        }
    }
}

행동으로 우주에 노출되기 위해, 방법은 특정 요구 사항을 충족해야합니다 :In order to be exposed to the universe as an action, a method must meet certain requirements:

  • 메서드는 공용이어야 합니다.The method must be public.
  • 메서드는 정적 메서드일 수 없습니다.The method cannot be a static method.
  • 메서드는 확장 메서드일 수 없습니다.The method cannot be an extension method.
  • 메서드는 생성자, 게터 또는 setter가 될 수 없습니다.The method cannot be a constructor, getter, or setter.
  • 메서드에 열려 있는 제네릭 형식을 가질 수 없습니다.The method cannot have open generic types.
  • 메서드는 컨트롤러 기본 클래스의 메서드가 아닙니다.The method is not a method of the controller base class.
  • 메서드는 ref 또는 out 매개 변수를 포함할 수 없습니다.The method cannot contain ref or out parameters.

컨트롤러 작업의 반환 유형에는 제한이 없습니다.Notice that there are no restrictions on the return type of a controller action. 컨트롤러 작업은 문자열, DateTime, Random 클래스의 인스턴스 또는 void를 반환할 수 있습니다.A controller action can return a string, a DateTime, an instance of the Random class, or void. ASP.NET MVC 프레임워크는 작업 결과가 아닌 반환 형식을 문자열로 변환하고 문자열을 브라우저로 렌더링합니다.The ASP.NET MVC framework will convert any return type that is not an action result into a string and render the string to the browser.

이러한 요구 사항을 위반하지 않는 메서드를 컨트롤러에 추가하면 메서드가 컨트롤러 작업으로 노출됩니다.When you add any method that does not violate these requirements to a controller, the method is exposed as a controller action. 여기에주의하십시오.Be careful here. 인터넷에 연결된 모든 사용자가 컨트롤러 작업을 호출할 수 있습니다.A controller action can be invoked by anyone connected to the Internet. 예를 들어 DeleteMyWebsite() 컨트롤러 작업을 만들지 마십시오.Do not, for example, create a DeleteMyWebsite() controller action.

공용 메서드가 호출되지 않도록 방지Preventing a Public Method from Being Invoked

컨트롤러 클래스에서 공용 메서드를 만들어야 하고 메서드를 컨트롤러 작업으로 노출하지 않으려면 [NonAction] 특성을 사용하여 메서드가 호출되지 않도록 할 수 있습니다.If you need to create a public method in a controller class and you don't want to expose the method as a controller action then you can prevent the method from being invoked by using the [NonAction] attribute. 예를 들어 목록 2의 컨트롤러에는 [NonAction] 특성으로 장식된 CompanySecrets()라는 공용 메서드가 포함되어 있습니다.For example, the controller in Listing 2 contains a public method named CompanySecrets() that is decorated with the [NonAction] attribute.

목록 2 - 컨트롤러\WorkController.csListing 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의 오류 메시지가 표시됩니다.If you attempt to invoke the CompanySecrets() controller action by typing /Work/CompanySecrets into the address bar of your browser then you'll get the error message in Figure 1.

비동작 메서드 호출Invoking a NonAction method

그림 01: 비동작 메서드호출(전체 크기 이미지를 보려면 클릭)Figure 01: Invoking a NonAction method(Click to view full-size image)