• 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

  • 相关阅读:
    第24课 #pragma使用分析
    第23课 #error和#line使用分析
    第22课 条件编译使用分析
    第21课 宏定义与使用分析
    Codeforces Round #142 (Div. 2)B. T-primes
    SPOJ XMAX
    Uva 10036
    Timus 1009. K-based Numbers
    MBLAST
    ROADS
  • 原文地址:https://www.cnblogs.com/qtiger/p/14871699.html
Copyright © 2020-2023  润新知