Usar o OWIN para Self-Host ASP.NET Web API

Este tutorial mostra como hospedar ASP.NET Web API em um aplicativo de console, usando o OWIN para hospedar automaticamente a estrutura da API Web.

Open Web Interface for .NET (OWIN) define uma abstração entre servidores Web .NET e aplicativos Web. O OWIN separa o aplicativo Web do servidor, o que torna o OWIN ideal para auto-hospedagem de um aplicativo Web em seu próprio processo, fora do IIS.

Versões de software usadas no tutorial

Observação

Você pode encontrar o código-fonte completo para este tutorial em github.com/aspnet/samples.

Criar um aplicativo de console

No menu Arquivo , Novo e, em seguida, selecione Projeto. Em Instalado, em Visual C#, selecione Área de Trabalho do Windows e, em seguida, selecione Aplicativo de Console (.Net Framework). Nomeie o projeto como "OwinSelfhostSample" e selecione OK.

Captura de tela da caixa de diálogo 'criar novo projeto', mostrando as opções de menu para selecionar Área de Trabalho do Windows e, em seguida, Aplicativo de Console na lista suspensa.

Adicionar a API Web e os pacotes OWIN

No menu Ferramentas , selecione Gerenciador de Pacotes NuGet e, em seguida, selecione Console do Gerenciador de Pacotes. Na janela Console do Gerenciador de Pacotes, digite o seguinte comando:

Install-Package Microsoft.AspNet.WebApi.OwinSelfHost

Isso instalará o pacote de autohost OWIN da WebAPI e todos os pacotes OWIN necessários.

Captura de tela do console do gerenciador de pacotes, mostrando informações de licenciamento, seguidas por PM > no final, sinalizando onde digitar o comando.

Configurar a API Web para auto-host

Em Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Adicionar / Classe para adicionar uma nova classe. Nome da classe Startup.

Captura de tela do menu da caixa de diálogo gerenciador de soluções, mostrando as etapas a serem seguidas para adicionar uma classe ao projeto.

Substitua todo o código clichê neste arquivo pelo seguinte:

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); 
        } 
    } 
}

Adicionar um controlador de API Web

Em seguida, adicione uma classe de controlador de API Web. Em Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Adicionar / Classe para adicionar uma nova classe. Nome da classe ValuesController.

Substitua todo o código clichê neste arquivo pelo seguinte:

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) 
        { 
        } 
    } 
}

Iniciar o Host OWIN e fazer uma solicitação com HttpClient

Substitua todo o código clichê no arquivo Program.cs pelo seguinte:

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(); 
            } 
        } 
    } 
 }

Executar o aplicativo

Para executar o aplicativo, pressione F5 no Visual Studio. A saída deve ser semelhante ao seguinte:

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"]

Captura de tela do console mostrando o código status e as informações para o aplicativo enquanto ele está em execução.

Recursos adicionais

Uma visão geral do projeto Katana

Hospedar ASP.NET Web API em uma função de trabalho do Azure