OWIN介绍和使用

一、概述

1、什么是OWIN

OWIN是Open Web Server Interface for .NET的首字母缩写,官网定义如下:
OWIN在.NET Web Servers与Web Application之间定义了一套标准接口,OWIN的目标是用于解耦Web Server和Web Application。基于此标准,鼓励开发者开发简单、灵活的模块,从而推进.NET Web Development开源生态系统的发展。

怎么理解呢?OWIN是针对.NET平台的开放Web接口,是Web应用程序与Web服务器之间的接口,OWIN通过引入一组抽象接口,解耦了.NET Web应用程序与Web服务器。总结来说:OWIN是对ASP.NET Runtime的抽象,ASP.NET 5.0是OWIN的一种实现。

2、OWIN的作用

IIS作为.NET开发者来说是最常用的Web Server,源于微软产品的紧耦合关系,我们不得不将Website、Web Application、Web API等部署在IIS上,但随着近些年来Web的发展,特别是移动互联网飞速发展,IIS作为Web Server已经暴露出他的不足了。主要体现在两个方面,ASP.NET (System.Web)紧耦合IIS,IIS紧耦合OS,这就意味着,我们的Web Framework必须部署在微软的操作系统上,难以跨平台。所以我们需要OWIN来解耦,在面向对象的世界里,接口往往是解耦的关键:使用OWIN,Web Framework不再依赖IIS和OS。

3、OWIN规范

OWIN定义了四层:

  • Host:主要负责应用程序的配置和启动进程,包括初始化OWIN Pipeline、运行Server。

  • Server:绑定套接字并监听的HTTP请求然后将Request和Response的Body、Header封装成符合OWIN规范的字典并发送到OWIN Middleware Pipeline中

  • Middleware:称之为中间件、组件,位于Server与Application之间,用来处理发送到Pipeline中的请求

  • Application:这是具体的应用程序代码,只不过我们将他们注册到OWIN Pipeline中去处理HTTP 请求,成为OWIN管道的一部分

 

二、OWIN示例

1、新建控制台项目

2、引入Microsoft.AspNet.WebApi.OwinSelfHost

3、添加Startup 类 

using Owin;
using System.Web.Http;

namespace OWINConsole
{
    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、添加WebAPI控制器

using System.Collections.Generic;
using System.Web.Http;

namespace OWINConsole
{
    public class TestController: ApiController
    {
        // GET api/<controller>
        public IEnumerable<string> Get()
        {
            return new string[] { "hello", "world" };
        }

        // GET api/<controller>/5
        public string Get(int id)
        {
            return string.Format("owin {0}", id);
        }

        // POST api/<controller>
        public void Post([FromBody] string value)
        {
        }

        // PUT api/<controller>/5
        public void Put(int id, [FromBody] string value)
        {
        }

        // DELETE api/<controller>/5
        public void Delete(int id)
        {
        }
    }
}

5、在Program.cs中添加如下代码

using Microsoft.Owin.Hosting;
using System;

namespace OWINConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            string baseAddress = "http://localhost:9000/";
            // 启动 OWIN host 
            WebApp.Start<Startup>(url: baseAddress);
            Console.WriteLine("程序已启动,按任意键退出");
            Console.ReadLine();
        }
    }
}

6、项目结构及运行效果

 运行效果如下:

7、跨平台

通过OWIN宿主ASP.NET WebAPI还可以完美的兼容Mono 3 及以上版本。可以参考https://www.cnblogs.com/zergcom/p/4619106.html查看如何部署到Linux。

三、参考资料

https://www.cnblogs.com/dudu/p/what-is-owin.html

https://baike.baidu.com/item/owin/2860765?fr=aladdin

原文地址:https://www.cnblogs.com/qtiger/p/14871699.html