使用 OWIN 自我裝載 ASP.NET Web API
本教學課程示範如何在主控台應用程式中裝載 ASP.NET Web API,使用 OWIN 自我裝載 Web API 架構。
Open Web Interface for .NET (OWIN) 定義了 .NET Web 伺服器和 Web 應用程式之間的抽象層。 OWIN 可將 Web 應用程式與伺服器解耦,這使得 OWIN 成為在您自己的程序中自我裝載網頁應用程式的理想選擇,而無需依賴 IIS。
教學課程中使用的軟體版本
- Visual Studio 2017
- Web API 5.2.7
注意
您可以在 github.com/aspnet/samples 找到本教學課程的完整原始碼。
建立主控台應用程式
在「檔案」功能表上,選擇「新增」,然後選擇「專案」。 從「已安裝」中的「Visual C#」下,選擇「Windows 桌面」,然後選擇「主控台應用程式 (.Net Framework)」。 將項目命名為「OwinSelfhostSample」並選擇「確定」。
新增 Web API 和 OWIN 套件
從「工具」功能表中,選擇「NuGet 套件管理員」,然後選擇「套件管理員主控台」。 在「套件管理員主控台」視窗中,輸入以下命令:
Install-Package Microsoft.AspNet.WebApi.OwinSelfHost
這將安裝 WebAPI OWIN 自我裝載套件和所有必要的 OWIN 套件。
設定 Web API 以自我裝載
在「方案總管」中,以滑鼠右鍵按一下該專案並選擇「新增 / 類別」以新增類別。 將類別命名為 Startup
。
將此文件中的所有樣板程式碼替換為以下內容:
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);
}
}
}
新增 Web API 控制器
接下來,新增一個 Web API 控制器類別。 在「方案總管」中,以滑鼠右鍵按一下該專案並選擇「新增 / 類別」以新增類別。 將類別命名為 ValuesController
。
將此文件中的所有樣板程式碼替換為以下內容:
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)
{
}
}
}
啟動 OWIN Host 並使用 HttpClient 發出請求
將 Program.cs 檔案中的所有樣板程式碼替換為以下內容:
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();
}
}
}
}
執行應用程式
若要執行應用程式,請在 Visual Studio 中按 F5。 輸出看起來應該如下所示:
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"]