一、OWIN

二、Katana

三、Middleware中间件

一、OWIN

1,OWIN介绍

OWIN是Open Web Server Interface for .Net的首字母缩写。OWIN在.Net Web Server与Web Application之间定义了一套标准接口。OWIN的目标用于解耦Web Server与Web Application。OWIN只是一个契约、规范,而非代码的实现(Katana实现了OWIN)

2,OWIN规范

1)OWIN定义了Host、Server、Middleware、Application四层

①Host:主要负责应用程序的配置和启动进程,包括初始化OWIN Pipeline(管道,包含了Middleware)、运行Server

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

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

④Application:具体的应用程序代码

2)Application Delegate(应用程序委托),用于Server与Middleware的交互。他并不是严格意义上的接口,而是一个委托并且每个OWIN中间件组件必须提供。

OWIN与Katana

3)Environment Dictionary(环境字典),对http请求的封装

request data:

Required
Key Name
Value Description
Yes
"owin.RequestBody"
请求体。Stream类型
Yes
"owin.RequestHeaders"
请求头。IDictionary<string, string[]>类型
Yes
"owin.RequestMethod"
包含请求的HTTP请求方法(例如,“GET”,“POST”)的字符串。
Yes
"owin.RequestPath"
包含请求路径的字符串。 该路径必须是相对于应用程序委托的“根”的
Yes
"owin.RequestPathBase"
包含与应用程序委托的“根”对应的请求路径部分的字符串
Yes
"owin.RequestProtocol"
包含协议名称和版本的字符串(例如“HTTP / 1.0”或“HTTP / 1.1”)。
Yes
"owin.RequestQueryString"
包含HTTP请求URI的查询字符串组件的字符串,不含前导“?”(例如,“foo = bar&baz = quux”)。 该值可能是一个空字符串。
Yes
"owin.RequestScheme"
包含用于请求的URI方案(例如“http”,“https”)的字符串

response data:

Required
Key Name
Value Description
Yes
"owin.ResponseBody"
响应体。Stream类型
Yes
"owin.ResponseHeaders"
响应头。IDictionary<string, string[]>类型
No
"owin.ResponseStatusCode"
包含RFC 2616第6.1.1节中定义的HTTP响应状态代码的可选项。 默认值是200。
No
"owin.ResponseReasonPhrase"
包含原因短语的可选字符串关联给定的状态码。 如果没有提供,则服务器应该按照RFC 2616第6.1.1节的规定提供默认值
No
"owin.ResponseProtocol"
包含协议名称和版本的可选字符串(例如“HTTP / 1.0”或“HTTP / 1.1”)。 如果没有提供,则“owin.RequestProtocol”键的值是默认值。

other data:

Required
Key Name
Value Description
Yes
"owin.CallCancelled"
指示请求是否被取消/中止
Yes
"owin.Version"
表示OWIN版本的字符串“1.0”

 

二、Katana

1,Katana介绍

①Katana实现了OWIN的Layers

OWIN与Katana

②Pileline中的Middleware是链式执行的,有开发人员控制

OWIN与Katana

③层

OWIN与Katana

 

2,使用ASP.NET/IIS托管Katana-based应用程序

nuget Microsoft.Owin.Host.SystemWeb

添加Startup启动类将Middleware中间件注册到Pileline中

using System;
using System.Threading.Tasks;
using Microsoft.Owin;
using Owin;

[assembly: OwinStartup(typeof(Katana.Systen.Web.Startup))]

namespace Katana.Systen.Web
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // 有关如何配置应用程序的详细信息,请访问 https://go.microsoft.com/fwlink/?LinkID=316888

            app.Run(context => { return context.Response.WriteAsync("holle World"); });
        }
    }
}
Startup

相关文章: