Asp.Net WebAPI這個大家應該都不陌生,在我的理解范圍中就是數據提供和交換的一個方式,相比與WCF,WS而言,更加的簡單輕量,但是在部署web Api的時候,一般往往需要與asp.net網站一起部署發布到IIS,在部署上來說並不是很簡潔方便,我只想為其他程序提供一個簡單的Api數據提供,卻要和iis還有網站來打交道,今天就來解決這個問題。
Asp.Net WebAPI生成的是一個程序集,並不是獨立的進程,因此,要運行的時候必須將其承載在相應的宿主上,一般比較常見的是IIS承載。很多時候,我們為了簡化部署或者功能集成,需要將其承載到獨立的進程上,這種方式一般稱之為Self-Host。
一般有以下三種承載方式
IIS
這里的IIS承載為我們平時一般使用較多的情況,這里不再闡述,主要介紹下面兩種方式
SelfHost
- 首先在Nuget上安裝Microsoft.AspNet.WebApi.SelfHost庫
- 編寫自己的APIController
public class UserController: ApiController { [HttpPost,HttpGet] public string PostGetInfo() { return "API測試地址"; } }
這里的API編寫位置有區分,包括寫在宿主程序中,和卸載自己的單獨程序集中,兩種方式的將在方式不一樣,下篇再進行說明
3.啟動服務編碼,這里是控制台項目
static void Main(string[] args) { var config = new HttpSelfHostConfiguration("http://localhost:8083"); config.Routes.MapHttpRoute( "API Default", "api/{controller}/{id}", new { id = RouteParameter.Optional }); using (var server = new HttpSelfHostServer(config)) { server.OpenAsync().Wait(); Console.WriteLine("Press Enter to quit."); Console.ReadLine(); } }
這里的示例中,保持API代碼與宿主代碼在統一程序集
OwinSelfHost
1. 通過Nuget來安裝 Microsoft.AspNet.WebApi.OwinSelfHost
2. 編寫自定義ApiController
public class UserController: ApiController { [HttpPost,HttpGet] public string PostGetInfo() { return "API測試地址"; } }
3.創建宿主程序,這里采用控制台項目,編寫Owin啟動類
public class Startup { public void Configuration(IAppBuilder appBuilder) { HttpConfiguration config = new HttpConfiguration(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); appBuilder.UseWebApi(config); } }
4.在宿主程序中啟動服務
static void Main(string[] args) { string baseAddress = "http://localhost:9000/"; // 啟動 OWIN host WebApp.Start<Startup>(url: baseAddress); Console.WriteLine("程序已啟動,按任意鍵退出"); Console.ReadLine(); }
至此,除開iis其他的兩種selfhost承載web api的方式就是上面的代碼,上面的情況為web api與宿主程序在一個程序集,如果不再一個程序集那需要通過其他的方式進行處理加載,否則api將無法訪問,下一篇將對多個api程序集的情況進行解決
