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测试地址";
        }
    }

3.启动服务编码,这里是控制台项目

        internal static void Main(string[] args)
        {
            Assembly.Load("WebApi2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");    //加载外部程序集
            var config = new HttpSelfHostConfiguration("http://localhost:8080");

            config.Routes.MapHttpRoute(
                "DefaultApi", "api/{controller}/{action}/{id}",
                new { id = RouteParameter.Optional });

            using (var server = new HttpSelfHostServer(config))
            {
                server.OpenAsync().Wait();
                Console.WriteLine("SelfHost启动成功");
                Console.ReadLine();
            }
        }

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将无法访问

转载于:https://www.cnblogs.com/liuxiaoji/p/8351375.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值