Web API 之承載宿主IIS,SelfHost,OwinSelfHost


     Asp.Net WebAPI這個大家應該都不陌生,在我的理解范圍中就是數據提供和交換的一個方式,相比與WCF,WS而言,更加的簡單輕量,但是在部署web Api的時候,一般往往需要與asp.net網站一起部署發布到IIS,在部署上來說並不是很簡潔方便,我只想為其他程序提供一個簡單的Api數據提供,卻要和iis還有網站來打交道,今天就來解決這個問題。
        Asp.Net WebAPI生成的是一個程序集,並不是獨立的進程,因此,要運行的時候必須將其承載在相應的宿主上,一般比較常見的是IIS承載。很多時候,我們為了簡化部署或者功能集成,需要將其承載到獨立的進程上,這種方式一般稱之為Self-Host。
      一般有以下三種承載方式
IIS 
     這里的IIS承載為我們平時一般使用較多的情況,這里不再闡述,主要介紹下面兩種方式
SelfHost
  1.   首先在Nuget上安裝Microsoft.AspNet.WebApi.SelfHost庫
  2.   編寫自己的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將無法訪問


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM