ASP.NET Web API 2 구성

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

구성 설정

Web API 구성 설정은 HttpConfiguration 클래스에 정의됩니다.

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

사전 요구 사항

Visual Studio 2017 Community, Professional 또는 Enterprise Edition입니다.

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 웹 애플리케이션" 프로젝트 템플릿은 새 ASP.NET 프로젝트 대화 상자에서 "Web API"를 선택하는 경우 구성 코드를 자동으로 설정합니다.

구성 코드를 자동으로 설정하도록 Web A P I 확인란이 선택된 새 ASP 점 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 인스턴스를 만듭니다. 이 인스턴스에 대한 구성을 수행한 다음 , 인스턴스를 Owin.UseWebApi 확장 메서드에 전달합니다.

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을 사용하여 ASP.NET Web API 2를 자체 호스트는 전체 단계를 보여줍니다.

글로벌 웹 API 서비스

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

메모

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

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

단일 인스턴스 서비스

서비스 설명
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 모델 유효성 검사기의 캐시를 제공합니다.

다중 인스턴스 서비스

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

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

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

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

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

컨트롤러별 구성

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

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

이렇게 하려면 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 개체로 변경하지 않는 모든 설정입니다.