Usar OWIN para autohospedar ASP.NET Web API

En este tutorial se muestra cómo hospedar ASP.NET Web API en una aplicación de consola mediante OWIN para autohospedar el marco de la API Web.

Open Web Interface for .net (OWIN) define una abstracción entre los servidores Web .net y las aplicaciones Web. OWIN desacopla la aplicación web del servidor, lo que hace que OWIN sea ideal para hospedar automáticamente una aplicación web en su propio proceso, fuera de IIS.

Versiones de software usadas en el tutorial

Note

Puede encontrar el código fuente completo de este tutorial en github.com/ASPNET/samples.

Creación de una aplicación de consola

En el menú archivo , haga clic en nuevoy seleccione proyecto. En instalado, en Visual C# , seleccione escritorio de Windows y, a continuación, seleccione aplicación de consola (.NET Framework) . Asigne al proyecto el nombre "OwinSelfhostSample" y seleccione Aceptar.

Incorporación de la API Web y los paquetes OWIN

En el menú herramientas , seleccione Administrador de paquetes NuGety, a continuación, seleccione consola del administrador de paquetes. En la ventana Package Manager Console, escriba el siguiente comando:

Install-Package Microsoft.AspNet.WebApi.OwinSelfHost

Se instalará el paquete de WebAPI OWIN selfhost y todos los paquetes OWIN necesarios.

Configuración de la API Web para el autohospedaje

En Explorador de soluciones, haga clic con el botón secundario en el proyecto y seleccione agregar / clase para agregar una nueva clase. Asigne a la clase el nombre Startup.

Reemplace todo el código reutilizable de este archivo por lo siguiente:

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

Incorporación de un controlador de API Web

A continuación, agregue una clase de controlador de API Web. En Explorador de soluciones, haga clic con el botón secundario en el proyecto y seleccione agregar / clase para agregar una nueva clase. Asigne a la clase el nombre ValuesController.

Reemplace todo el código reutilizable de este archivo por lo siguiente:

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

Inicio del host OWIN y solicitud con HttpClient

Reemplace todo el código reutilizable en el archivo Program.cs por lo siguiente:

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

Ejecutar la aplicación

Para ejecutar la aplicación, presione F5 en Visual Studio. La salida debe tener un aspecto parecido al siguiente:

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

Recursos adicionales

Información general del proyecto Katana

ASP.NET Web API host en un rol de trabajo de Azure