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 웹 애플리케이션" 프로젝트 템플릿이 구성 코드를 자동으로 설정합니다.
프로젝트 템플릿은 App_Start 폴더 내에 WebApiConfig.cs라는 파일을 만듭니다. 이 코드 파일은 Web API 구성 코드를 배치해야 하는 대리자를 정의합니다.
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 개체입니다.