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