OWIN을 사용하여 Self-Host ASP.NET Web API

이 자습서에서는 OWIN을 사용하여 Web API 프레임워크를 자체 호스팅하는 콘솔 애플리케이션에서 ASP.NET Web API 호스트하는 방법을 보여 줍니다.

OWIN(Open Web Interface for .NET)은 .NET 웹 서버와 웹 애플리케이션 간의 추상화 를 정의합니다. OWIN은 서버에서 웹 애플리케이션을 분리하므로 OWIN은 IIS 외부에서 사용자 고유의 프로세스에서 웹 애플리케이션을 자체 호스팅하는 데 이상적입니다.

자습서에서 사용되는 소프트웨어 버전

참고

이 자습서의 전체 소스 코드는 github.com/aspnet/samples 찾을 수 있습니다.

콘솔 애플리케이션 만들기

파일 메뉴의 새로 만들기에서 프로젝트를 선택합니다. 설치됨Visual C#에서 Windows 데스크톱을 선택한 다음 콘솔 앱(.Net Framework)을 선택합니다. 프로젝트의 이름을 "OwinSelfhostSample"로 지정하고 확인을 선택합니다.

드롭다운 목록에서 Windows 데스크톱 및 콘솔 앱을 선택하는 메뉴 옵션을 보여 주는 '새 프로젝트 만들기' 대화 상자의 스크린샷

Web API 및 OWIN 패키지 추가

도구 메뉴에서 NuGet 패키지 관리자를 선택한 다음 패키지 관리자 콘솔을 선택합니다. 패키지 관리자 콘솔 창에서 다음 명령을 입력합니다.

Install-Package Microsoft.AspNet.WebApi.OwinSelfHost

그러면 WebAPI OWIN 셀프 호스트 패키지와 필요한 모든 OWIN 패키지가 설치됩니다.

라이선스 정보를 보여 주는 패키지 관리자 콘솔의 스크린샷, 끝에 PM > 이 표시되고 명령을 입력할 위치를 알리는 신호가 표시됩니다.

자체 호스트에 대한 Web API 구성

솔루션 탐색기 프로젝트를 마우스 오른쪽 단추로 클릭하고클래스추가 / 를 선택하여 새 클래스를 추가합니다. 클래스 Startup 이름을 지정합니다.

프로젝트에 클래스를 추가하기 위해 수행할 단계를 보여 주는 솔루션 탐색기 대화 상자 메뉴의 스크린샷

이 파일의 모든 상용구 코드를 다음으로 바꿉다.

using Owin; 
using System.Web.Http; 

namespace OwinSelfhostSample 
{ 
    public class Startup 
    { 
        // This code configures Web API. The Startup class is specified as a type
        // parameter in the WebApp.Start method.
        public void Configuration(IAppBuilder appBuilder) 
        { 
            // Configure Web API for self-host. 
            HttpConfiguration config = new HttpConfiguration(); 
            config.Routes.MapHttpRoute( 
                name: "DefaultApi", 
                routeTemplate: "api/{controller}/{id}", 
                defaults: new { id = RouteParameter.Optional } 
            ); 

            appBuilder.UseWebApi(config); 
        } 
    } 
}

Web API 컨트롤러 추가

다음으로, Web API 컨트롤러 클래스를 추가합니다. 솔루션 탐색기 프로젝트를 마우스 오른쪽 단추로 클릭하고클래스추가 / 를 선택하여 새 클래스를 추가합니다. 클래스 ValuesController 이름을 지정합니다.

이 파일의 모든 상용구 코드를 다음으로 바꿉다.

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

namespace OwinSelfhostSample 
{ 
    public class ValuesController : ApiController 
    { 
        // GET api/values 
        public IEnumerable<string> Get() 
        { 
            return new string[] { "value1", "value2" }; 
        } 

        // GET api/values/5 
        public string Get(int id) 
        { 
            return "value"; 
        } 

        // POST api/values 
        public void Post([FromBody]string value) 
        { 
        } 

        // PUT api/values/5 
        public void Put(int id, [FromBody]string value) 
        { 
        } 

        // DELETE api/values/5 
        public void Delete(int id) 
        { 
        } 
    } 
}

OWIN 호스트를 시작하고 HttpClient를 사용하여 요청

Program.cs 파일의 모든 상용구 코드를 다음으로 바꿉니다.

using Microsoft.Owin.Hosting;
using System;
using System.Net.Http;

namespace OwinSelfhostSample 
{ 
    public class Program 
    { 
        static void Main() 
        { 
            string baseAddress = "http://localhost:9000/"; 

            // Start OWIN host 
            using (WebApp.Start<Startup>(url: baseAddress)) 
            { 
                // Create HttpClient and make a request to api/values 
                HttpClient client = new HttpClient(); 

                var response = client.GetAsync(baseAddress + "api/values").Result; 

                Console.WriteLine(response); 
                Console.WriteLine(response.Content.ReadAsStringAsync().Result); 
                Console.ReadLine(); 
            } 
        } 
    } 
 }

애플리케이션 실행

애플리케이션을 실행하려면 Visual Studio에서 F5 키를 누릅니다. 출력은 다음과 비슷합니다.

StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: 
{ 
  Date: Tue, 09 Jul 2013 18:10:15 GMT 
  Server: Microsoft-HTTPAPI/2.0 
  Content-Length: 19 
  Content-Type: application/json; charset=utf-8 
} 
["value1","value2"]

실행 중인 애플리케이션에 대한 상태 코드 및 정보를 보여 주는 콘솔의 스크린샷

추가 리소스

프로젝트 Katana 개요

Azure 작업자 역할의 호스트 ASP.NET Web API