Verwenden von OWIN zum Self-Host ASP.NET-Web-API

In diesem Tutorial erfahren Sie, wie Sie ASP.NET-Web-API in einer Konsolenanwendung mit OWIN hosten, um das Web-API-Framework selbst zu hosten.

Open Web Interface for .NET (OWIN) definiert eine Abstraktion zwischen .NET-Webservern und Webanwendungen. OWIN entkoppelt die Webanwendung vom Server, wodurch OWIN ideal für das Selbsthosting einer Webanwendung in Ihrem eigenen Prozess außerhalb von IIS ist.

Im Tutorial verwendete Softwareversionen

Hinweis

Den vollständigen Quellcode für dieses Tutorial finden Sie unter github.com/aspnet/samples.

Erstellen einer Konsolenanwendung

Wählen Sie im Menü Datei die Option Neu aus, und wählen Sie dann Projekt aus. Wählen Sie unter Installiert unter Visual C#die Option Windows Desktop und dann Konsolen-App (.Net Framework) aus. Nennen Sie das Projekt "OwinSelfhostSample", und wählen Sie OK aus.

Screenshot des Dialogfelds

Hinzufügen der Web-API- und OWIN-Pakete

Wählen Sie im Menü Extras die Option NuGet-Paket-Manager und dann Paket-Manager-Konsole aus. Geben Sie im Fenster Paket-Manager-Konsole den folgenden Befehl ein:

Install-Package Microsoft.AspNet.WebApi.OwinSelfHost

Dadurch werden das WebAPI OWIN Selfhost-Paket und alle erforderlichen OWIN-Pakete installiert.

Screenshot der Paket-Manager-Konsole mit Lizenzierungsinformationen, gefolgt von P M > am Ende, der signalisiert, wo der Befehl eingegeben werden soll.

Konfigurieren der Web-API für den Selbsthost

Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und wählen SieKlassehinzufügen / aus, um eine neue Klasse hinzuzufügen. Geben Sie der Klassen den Namen Startup.

Screenshot des Dialogfeldmenüs des Projektmappen-Explorers mit den Schritten zum Hinzufügen einer Klasse zum Projekt.

Ersetzen Sie den gesamten Code der Bausteine in dieser Datei durch Folgendes:

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

Hinzufügen eines Web-API-Controllers

Fügen Sie als Nächstes eine Web-API-Controllerklasse hinzu. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und wählen SieKlassehinzufügen / aus, um eine neue Klasse hinzuzufügen. Geben Sie der Klassen den Namen ValuesController.

Ersetzen Sie den gesamten Code der Bausteine in dieser Datei durch Folgendes:

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

Starten Sie den OWIN-Host, und stellen Sie eine Anforderung mit HttpClient.

Ersetzen Sie den gesamten Code der Codebausteine in der Datei Program.cs durch Folgendes:

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

Ausführen der Anwendung

Drücken Sie F5 in Visual Studio, um die Anwendung auszuführen. Die Ausgabe sollte wie folgt aussehen:

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 der Konsole mit dem status Code und Informationen für die Anwendung, während sie ausgeführt wird.

Zusätzliche Ressourcen

Übersicht über das Katana-Projekt

Hosten ASP.NET-Web-API in einer Azure-Workerrolle