ASP.NET Web API 2 구성

이 항목에서는 ASP.NET Web API 구성하는 방법을 설명합니다.

구성 설정

Web API 구성 설정은 HttpConfiguration 클래스에 정의되어 있습니다.

멤버 설명
DependencyResolver 컨트롤러에 대한 종속성 주입을 사용하도록 설정합니다. Web API 종속성 확인자 사용을 참조하세요.
필터 작업 필터.
포맷터 미디어 형식 포맷터.
IncludeErrorDetailPolicy 서버에 HTTP 응답 메시지에 예외 메시지 및 스택 추적과 같은 오류 세부 정보를 포함해야 하는지 여부를 지정합니다. IncludeErrorDetailPolicy를 참조하세요.
Initializer HttpConfiguration의 최종 초기화를 수행하는 함수입니다.
MessageHandlers HTTP 메시지 처리기.
ParameterBindingRules 컨트롤러 작업에서 매개 변수를 바인딩하기 위한 규칙 컬렉션입니다.
속성 제네릭 속성 모음입니다.
경로 경로 컬렉션입니다. ASP.NET Web API 라우팅을 참조하세요.
Services 서비스 컬렉션입니다. 서비스를 참조하세요.

사전 요구 사항

Visual Studio 2017 Community, Professional 또는 Enterprise 버전

ASP.NET 호스팅을 사용하여 Web API 구성

ASP.NET 애플리케이션에서 Application_Start 메서드에서 GlobalConfiguration.Configure를 호출하여 Web API를 구성합니다. Configure 메서드는 HttpConfiguration 형식의 단일 매개 변수가 있는 대리자를 사용합니다. 대리자 내에서 모든 구성을 수행합니다.

다음은 익명 대리자를 사용하는 예제입니다.

using System.Web.Http;
namespace WebApplication1
{
    public class WebApiApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            GlobalConfiguration.Configure(config =>
            {
                config.MapHttpAttributeRoutes();

                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{id}",
                    defaults: new { id = RouteParameter.Optional }
                );
            });
        }
    }
}

Visual Studio 2017에서 새 ASP.NET 프로젝트 대화 상자에서 "Web API"를 선택하면 "ASP.NET 웹 애플리케이션" 프로젝트 템플릿이 구성 코드를 자동으로 설정합니다.

구성 코드를 자동으로 설정하도록 Web A P I 확인란이 선택된 새 ASP dot NET 프로젝트 대화 상자의 스크린샷

프로젝트 템플릿은 App_Start 폴더 내에 WebApiConfig.cs라는 파일을 만듭니다. 이 코드 파일은 Web API 구성 코드를 배치해야 하는 대리자를 정의합니다.

App Start 폴더 내에서 Web A P I Config dot c가 빨간색으로 윤곽선으로 표시된 솔루션 탐색기 대화 상자의 스크린샷

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

namespace WebApplication1
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // TODO: Add any additional configuration code.

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
}

또한 프로젝트 템플릿은 Application_Start 대리자를 호출하는 코드를 추가합니다.

public class WebApiApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
}

OWIN Self-Hosting 사용하여 Web API 구성

OWIN을 사용하여 자체 호스팅하는 경우 새 HttpConfiguration instance 만듭니다. 이 instance 구성을 수행한 다음 Owin.UseWebApi 확장 메서드에 instance 전달합니다.

public class Startup 
{ 
    public void Configuration(IAppBuilder appBuilder) 
    { 
        HttpConfiguration config = new HttpConfiguration(); 

        config.Routes.MapHttpRoute( 
            name: "DefaultApi", 
            routeTemplate: "api/{controller}/{id}", 
            defaults: new { id = RouteParameter.Optional } 
        ); 

        appBuilder.UseWebApi(config); 
    } 
}

OWIN을 사용하여 Self-Host ASP.NET Web API 2 자습서에는 전체 단계가 표시됩니다.

글로벌 Web API Services

HttpConfiguration.Services 컬렉션에는 Web API가 컨트롤러 선택 및 콘텐츠 협상과 같은 다양한 작업을 수행하는 데 사용하는 전역 서비스 집합이 포함되어 있습니다.

참고

Services 컬렉션은 서비스 검색 또는 종속성 주입을 위한 범용 메커니즘이 아닙니다. Web API 프레임워크에 알려진 서비스 유형만 저장합니다.

Services 컬렉션은 기본 서비스 집합으로 초기화되며 고유한 사용자 지정 구현을 제공할 수 있습니다. 일부 서비스는 여러 인스턴스를 지원하지만 다른 서비스는 instance 하나만 가질 수 있습니다. (그러나 컨트롤러 수준에서 서비스를 제공할 수도 있습니다. 컨트롤러별 구성을 참조하세요.

Single-Instance 서비스

서비스 설명
IActionValueBinder 매개 변수에 대한 바인딩을 가져옵니다.
IApiExplorer 애플리케이션에서 노출하는 API에 대한 설명을 가져옵니다. Web API에 대한 도움말 페이지 만들기를 참조하세요.
IAssembliesResolver 애플리케이션의 어셈블리 목록을 가져옵니다. 라우팅 및 작업 선택을 참조하세요.
IBodyModelValidator 미디어 형식 포맷터가 요청 본문에서 읽은 모델의 유효성을 검사합니다.
IContentNegotiator 콘텐츠 협상을 수행합니다.
IDocumentationProvider API에 대한 설명서를 제공합니다. 기본값은 null입니다. Web API에 대한 도움말 페이지 만들기를 참조하세요.
IHostBufferPolicySelector 호스트가 HTTP 메시지 엔터티 본문을 버퍼링해야 하는지 여부를 나타냅니다.
IHttpActionInvoker 컨트롤러 작업을 호출합니다. 라우팅 및 작업 선택을 참조하세요.
IHttpActionSelector 컨트롤러 작업을 선택합니다. 라우팅 및 작업 선택을 참조하세요.
IHttpControllerActivator 컨트롤러를 활성화합니다. 라우팅 및 작업 선택을 참조하세요.
IHttpControllerSelector 컨트롤러를 선택합니다. 라우팅 및 작업 선택을 참조하세요.
IHttpControllerTypeResolver 애플리케이션의 Web API 컨트롤러 유형 목록을 제공합니다. 라우팅 및 작업 선택을 참조하세요.
ITraceManager 추적 프레임워크를 초기화합니다. ASP.NET Web API 추적을 참조하세요.
ITraceWriter 추적 작성기를 제공합니다. 기본값은 "no-op" 추적 기록기입니다. ASP.NET Web API 추적을 참조하세요.
IModelValidatorCache 모델 유효성 검사기의 캐시를 제공합니다.

Multiple-Instance Services

서비스 설명
IFilterProvider 컨트롤러 작업에 대한 필터 목록을 반환합니다.
ModelBinderProvider 지정된 형식에 대한 모델 바인더를 반환합니다.
ModelMetadataProvider 모델에 대한 메타데이터를 제공합니다.
ModelValidatorProvider 모델에 대한 유효성 검사기를 제공합니다.
ValueProviderFactory 값 공급자를 만듭니다. 자세한 내용은 Mike Stall의 블로그 게시물 WebAPI에서 사용자 지정 값 공급자를 만드는 방법을 참조하세요.

다중 instance 서비스에 사용자 지정 구현을 추가하려면 Services 컬렉션에서 추가 또는 삽입을 호출합니다.

config.Services.Add(typeof(IFilterProvider), new MyFilterProvider());

단일 instance 서비스를 사용자 지정 구현으로 바꾸려면 Services 컬렉션에서 Replace를 호출합니다.

config.Services.Replace(typeof(ITraceWriter), new MyTraceWriter());

Per-Controller 구성

컨트롤러별로 다음 설정을 재정의할 수 있습니다.

  • 미디어 형식 포맷터
  • 매개 변수 바인딩 규칙
  • 서비스

이렇게 하려면 IControllerConfiguration 인터페이스를 구현하는 사용자 지정 특성을 정의합니다. 그런 다음, 컨트롤러에 특성을 적용합니다.

다음 예제에서는 기본 미디어 형식 포맷터를 사용자 지정 포맷터로 바꿉니다.

using System;
using System.Web.Http;
using System.Web.Http.Controllers;

namespace WebApplication1.Controllers
{

    public class UseMyFormatterAttribute : Attribute, IControllerConfiguration
    {
        public void Initialize(HttpControllerSettings settings,
            HttpControllerDescriptor descriptor)
        {
            // Clear the formatters list.
            settings.Formatters.Clear();

            // Add a custom media-type formatter.
            settings.Formatters.Add(new MyFormatter());
        }
    }

    [UseMyFormatter]
    public class ValuesController : ApiController
    {
        // Controller methods not shown...
    }
}

IControllerConfiguration.Initialize 메서드는 두 개의 매개 변수를 사용합니다.

  • HttpControllerSettings 개체
  • HttpControllerDescriptor 개체

HttpControllerDescriptor에는 두 컨트롤러를 구분하기 위해 정보 목적으로 검사할 수 있는 컨트롤러에 대한 설명이 포함되어 있습니다.

HttpControllerSettings 개체를 사용하여 컨트롤러를 구성합니다. 이 개체에는 컨트롤러별로 재정의할 수 있는 구성 매개 변수의 하위 집합이 포함되어 있습니다. 기본값을 변경하지 않는 모든 설정은 전역 HttpConfiguration 개체입니다.