使用 OWIN Self-Host ASP.NET Web API
本教程介绍如何使用 OWIN 在控制台应用程序中托管 ASP.NET Web API,以自承载 Web API 框架。
.NET (OWIN) .NET 开放 Web 接口定义 .NET Web 服务器和 Web 应用程序之间的抽象。 OWIN 将 Web 应用程序与服务器分离,这使得 OWIN 非常适合在 IIS 外部的你自己的进程中自承载 Web 应用程序。
本教程中使用的软件版本
- Visual Studio 2017
- Web API 5.2.7
注意
可以在 github.com/aspnet/samples 中找到本教程的完整源代码。
创建控制台应用程序
在“ 文件 ”菜单上,选择“ 新建”,然后选择“ 项目”。 在 “已安装”的 Visual C# 下,选择“ Windows 桌面 ”,然后选择“ 控制台应用” (.Net 框架) 。 将项目命名为“OwinSelfhostSample”,然后选择“ 确定”。
添加 Web API 和 OWIN 包
从 “工具 ”菜单中选择“ NuGet 包管理器”,然后选择“ 包管理器控制台”。 在“Package Manager Console”窗口中,输入以下命令:
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 主机并使用 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"]