Uso de OWIN para autohospedar ASP.NET Web API

En este tutorial se muestra cómo hospedar ASP.NET API web en una aplicación de consola, mediante OWIN para hospedar automáticamente el marco de Web API.

Open Web Interface for .NET (OWIN) define una abstracción entre servidores web .NET y aplicaciones web. OWIN desacopla la aplicación web del servidor, lo que hace que OWIN sea ideal para el autohospedaje de una aplicación web en su propio proceso, fuera de IIS.

Versiones de software usadas en el tutorial

Nota:

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, Nuevo y, a continuación, seleccione Project. 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.

Screenshot of the 'create new project' dialog box, showing the menu options to select Windows Desktop then Console App from the dropdown list.

Adición de paquetes OWIN y Web API

En el menú Herramientas, seleccione Administrador de paquetes NuGet y, a continuación, Consola del administrador de paquetes. En la ventana Consola del Administrador de paquetas , escriba el siguiente comando:

Install-Package Microsoft.AspNet.WebApi.OwinSelfHost

Esto instalará el paquete WebAPI OWIN de autohospedaje y todos los paquetes OWIN necesarios.

Screenshot of the package manager console, showing licensing information, followed by P M > at the end, signaling where to type the command.

Configuración de la Web API para el autohospede

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

Screenshot of the solution explorer dialog box menu, showing the steps to follow for adding a class to the project.

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

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

Adición de un controlador de Web API

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

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

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

Inicie el host OWIN y realice una 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(); 
            } 
        } 
    } 
 }

Ejecución de la aplicación

Para ejecutar la aplicación, presione F5 en Visual Studio. La salida debe tener un aspecto similar 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"]

Screenshot of the console, showing the status code and information for the application as it's running.

Recursos adicionales

Información general del proyecto Katana

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