欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

WebAPI-处理架构

程序员文章站 2024-02-06 20:02:46
带着问题去思考,大家好! 问题1:HTTP请求和返回相应的HTTP响应信息之间发生了什么? 1:首先是最底层,托管层,位于WebAPI和底层HTTP栈之间 2:其次是 消息处理程序管道层,这里比如日志和缓存。OWIN的引用是将消息处理程序管道的一些功能下移到栈下端的OWIN中间件了。 3:控制器处理 ......

带着问题去思考,大家好!

问题1:http请求和返回相应的http响应信息之间发生了什么?

WebAPI-处理架构

 

1:首先是最底层,托管层,位于webapi和底层http栈之间

2:其次是 消息处理程序管道层,这里比如日志和缓存。owin的引用是将消息处理程序管道的一些功能下移到栈下端的owin中间件了。

3:控制器处理,http响应,参数的验证和绑定。

托管层

首先是人生三大哲学问题;

1:是webapi和底层http基础结构的接口,分三类(windows进程,[服务啊,控制台啊]&web托管[web hosting,iis]&owin的兼容服务器[katana])

2:它在架构最底层,托管层,位于webapi和底层http栈之间

3:它的职责是负责api托管

比如:asp.net管道。httplistener( http 协议侦听器,https://docs.microsoft.com/zh-cn/dotnet/api/system.net.httplistener?redirectedfrom=msdn&view=netframework-4.7.2).owin宿主。

负责创建httprquestmessage,返回httpresponsemessage.转换为底层网络栈处理。

上面第二类,web托管说下流程,托管层---httcontrollerhandler---webapi管道,处理后的消息通过httpresonsemessage实例复制为httpresonse,然后在转给asp.net管道

消息处理管道

这层跟中间件的概念差不多。它有个扩展点,拦截器。

比如:日志和缓存,web服务器网管接口,python的wsgi.

首先要知道这几个类,httpmessagehandler,delegatinghandler

WebAPI-处理架构

 

 

继承object---httpmessagehandler--delegatinghandle--messageprocessinghandler

抽象方法sendasync接受httprequestmessage实例,返回task<httpresponse message>,异步生成一个httpresponsemessage.这个方法是基于任务的异步模式。

消息处理程序还需要一个数据成员,保存指向一个内部处理程序的指针和数据流逻辑,把请求和响应从一个处理程序委托给他的内部处理程序,delegatinghandle定义了innerhandler属性,将一个处理程序连接到其内部处理程序。

httpconfiguration.messagehandlers集合属性定义了消息处理程序委托的顺序。

路由分发

在消息处理程序末端。

有路由分发,httproutingdispatcher类实现。根据匹配的ihttproute类选择转发请求所用的下一个处理程序

和控制器分发:httpcontrollerdispatcher类实现。调用executeasync方法,传入请求消息。

控制器处理

可以直接使用ihttpcontroller,通常做法是从抽象类apicontroller进行派生。

数据绑定:

apicontroller.executeasync方法调用一系列httpparameterbinding实例。将参数添加到httpactioncontext实例的actionarguments字典中