Usare OWIN per Self-Host API Web ASP.NET
Questa esercitazione illustra come ospitare API Web ASP.NET in un'applicazione console, usando OWIN per ospitare autonomamente il framework API Web.
Open Web Interface for .NET (OWIN) definisce un'astrazione tra i server Web .NET e le applicazioni Web. OWIN separa l'applicazione Web dal server, che rende OWIN ideale per l'self-hosting di un'applicazione Web nel proprio processo, all'esterno di IIS.
Versioni software usate nell'esercitazione
- Visual Studio 2017
- API Web 5.2.7
Nota
È possibile trovare il codice sorgente completo per questa esercitazione in github.com/aspnet/samples.
Creare un'applicazione console
Scegliere Progetto dal menu File, Nuovo. In Installato, in Visual C#, selezionare Desktop di Windows e quindi App console (.Net Framework). Assegnare al progetto il nome "OwinSelfhostSample" e selezionare OK.
Aggiungere l'API Web e i pacchetti OWIN
Dal menu Strumenti selezionare Gestione pacchetti NuGet e quindi console di Gestione pacchetti. Nella finestra Console di gestione pacchetti immettere il comando seguente:
Install-Package Microsoft.AspNet.WebApi.OwinSelfHost
Verrà installato il pacchetto selfhost OWIN WebAPI e tutti i pacchetti OWIN necessari.
Configurare l'API Web per l'self-host
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto e scegliere Aggiungi / classe per aggiungere una nuova classe. Denominare la classe Startup
.
Sostituire tutto il codice boilerplate in questo file con quanto segue:
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);
}
}
}
Aggiungere un controller API Web
Aggiungere quindi una classe controller API Web. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto e scegliere Aggiungi / classe per aggiungere una nuova classe. Denominare la classe ValuesController
.
Sostituire tutto il codice boilerplate in questo file con quanto segue:
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)
{
}
}
}
Avviare l'host OWIN ed effettuare una richiesta con HttpClient
Sostituire tutto il codice boilerplate nel file Program.cs con quanto segue:
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();
}
}
}
}
Eseguire l'applicazione
Per eseguire l'applicazione, premere F5 in Visual Studio. L'output sarà simile al seguente:
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"]