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將無法訪問

