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
- Visual Studio 2017
- Web API 5.2.7
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.
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.
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.
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"]