zoukankan      html  css  js  c++  java
  • 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将无法访问

  • 相关阅读:
    Rabbit官方文档翻译之Publish Subscribe(三)
    Maven项目导入本地Jar包
    位运算实现整数的加减乘数运算
    SpringMVC通过工具类获取Request域
    终止线程的2种方法。标记法和中断
    Spring 下默认事务机制中@Transactional 无效的原因
    java泛型 泛型的内部原理:类型擦除以及类型擦除带来的问题
    java.lang.Object.clone()分析
    我的Node.js学习历程
    setTimeout的妙用2——防止循环超时
  • 原文地址:https://www.cnblogs.com/lhxsoft/p/8623599.html
Copyright © 2011-2022 走看看