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

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

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

继承Object---HttpMessageHandler--DelegatingHandler--MessageProcessingHandler

抽象方法SendAsync接受HttpRequestMessage实例,返回Task<HttpResponse Message>,异步生成一个HttpResponseMessage.这个方法是基于任务的异步模式。

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

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

路由分发

在消息处理程序末端。

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

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

控制器处理

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

数据绑定:

ApiController.ExecuteAsync方法调用一系列HttpParameterBinding实例。将参数添加到HttpActionContext实例的ActionArguments字典中

WebAPI-处理架构的更多相关文章

  1. Intellij Idea下搭建基于Spring+SpringMvc+MyBatis的WebApi接口架构

    2018-08-16 09:27 更新 强烈推荐使用Springboot来搭建MVC框架! 强烈推荐使用Springboot来搭建MVC框架! 强烈推荐使用Springboot来搭建MVC框架! 后文 ...

  2. webapi应用架构详解

    webapi适用场景 常见的应用包括以下四类,PC客户端程序,APP程序,网站程序,H5程序.这些应用需要的数据,服务可由同一个接口服务程序提供,这样,大大提高了产品多平台设计开发的效率,避免了重复的 ...

  3. mvc+webapi 项目架构

    首先项目是mvc5+webapi2.0+orm-dapper+ef codefirst+redis+quartz.net+actionmq. 1.项目框架层次结构: 这个mvc项目根据不同的业务和功能 ...

  4. 项目架构mvc+webapi

    mvc+webapi 项目架构 首先项目是mvc5+webapi2.0+orm-dapper+ef codefirst. 1.项目框架层次结构: 这个mvc项目根据不同的业务和功能进行不同的区域划分, ...

  5. Asp.Net WebApi核心对象解析(下篇)

    在接着写Asp.Net WebApi核心对象解析(下篇)之前,还是一如既往的扯扯淡,元旦刚过,整个人还是处于晕的状态,一大早就来处理系统BUG,简直是坑爹(好在没让我元旦赶过来该BUG),队友挖的坑, ...

  6. 适合WebApi的简单的C#状态机实现

    目标 采用了Restful WebApi的架构,再把业务逻辑状态转移放到后端就有点违背初衷了.实际上只要后端Api的权限设置的好,把状态转移放到前端也未尝不可.我考虑的结果是,一般如果变更这个状态本身 ...

  7. 实例快速上手 -ASP.NET 4.5新特性WebAPI从入门到精通

    在新出的MVC4中,增加了WebAPI,用于提供REST风格的WebService,新生成的WebAPI项目和典型的MVC项目一样,包含主要的Models.Views.Controllers等文件夹和 ...

  8. Web API应用架构在Winform混合框架中的应用(1)

    在<Web API应用架构设计分析(1)>和<Web API应用架构设计分析(2)>中对WebAPI的架构进行了一定的剖析,在当今移动优先的口号下,传统平台都纷纷开发了属于自己 ...

  9. MVC4 WebAPI(二)——Web API工作方式

    http://www.cnblogs.com/wk1234/archive/2012/05/07/2486872.html 在上篇文章中和大家一起学习了建立基本的WebAPI应用,立刻就有人想到了一些 ...

  10. ASP.NET 4.5新特性WebAPI从入门到精通

    在新出的MVC4中,增加了WebAPI,用于提供REST风格的WebService,新生成的WebAPI项目和典型的MVC项目一样,包含主要的Models.Views.Controllers等文件夹和 ...

随机推荐

  1. bzoj2882工艺(最小表示法)

    O(nlogn)的做法十分显然,有三种可以做到O(nlogn)的:1.最容易的想法:把串扩展成两倍,然后跑一遍SA求后缀数组.2.求后缀同样也可以用SAM去求解,用map存一下.3.最暴力的方法:直接 ...

  2. mpu6050的驱动的加载和测试步骤

    mpu6050的使用方法: 1.接线方式: VCC,GND,SCL,SDA,正常接法,VCC接3.3v,主要说一下AD0引脚,用来表示地址 接低电平设备地址为0x68,接高电平表示0x69 2.设备接 ...

  3. DFS-BFS(深搜广搜)原理及C++代码实现

    深搜和广搜是图很多算法的基础,很多图的算法都是从这两个算法中启发而来. 深搜简单地说就是直接一搜到底,然后再回溯,再一搜到底,一直如此循环到没有新的结点. 广搜简单地说就是一层一层的搜,像水的波纹一样 ...

  4. 类似postman插件

    Talend API Tester - Free Edition https://chrome.google.com/webstore/detail/talend-api-tester-free-ed ...

  5. C# 关闭登录窗体,显示主窗体

    首先在programm.cs里设置登录窗体显示 static class Program    {        /// <summary>        /// The main ent ...

  6. RDD(四)——transformation_key_value类型

    这里所有算子均只适用于pairRDD.pairRDD的数据类型是(k,v)形式的键值对: PartitionBy(Partitioner) 对pairRDD进行分区操作,如果原有的partioner和 ...

  7. 前端-js-长期维护

    ###############    JS简介和JS引入     ################ <!DOCTYPE html> <html lang="en" ...

  8. OpenCV 基本的阈值操作

    #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #i ...

  9. win7+centos6.5安装双系统

    前言:之前在琢磨怎么安装双系统 倒腾了两天终于给装上了 使用软件 镜像:CentOS-6.5-x86_64-bin-DVD1.iso 开机引导软件 easybcd2.2 u盘制作软件 USBWrite ...

  10. SpringMVC学习笔记九:拦截器及拦截器的简单实用

    SpringMVC中的interceptor拦截器是非常重要的,它的主要作用就是拦截指定的用户请求,并进行相应的预处理和后处理. 拦截时间点在"处理器映射器根据用户提交的请求映射出所要执行的 ...