ASP.NET Web API 处理架构

这篇文章主要是介绍ASP.NET Web API的处理架构:当一个HTTP请求到达直到产生一个请求的过程。ASP.NET Web API 的处理架构图如下,主要有三层组成:宿主(hosting),消息处理管道(message handler pipeline)和控制器处理(controller handling).

宿主(Hosting)

底层负责Web API的宿主,Web API之间的接口和HTTP 处理引擎。一句话,这一层负责创建HttpRequestMessage实例。然后把他们推入到上层的消息处理管道。宿主层也负责消息处理管道返回的HttpResponseMessage 。目前在ASP.NET Web API里头已经内建的宿主选项有2个:self-hosting 和 web hosting, web hosting也就是宿主在IIS的ASP.net 的处理管道里,Self-hosting 是基于WCF channel stack,的 WCF Message 实例  ,然后转换到 HttpRequestMessage 实例然后把他们推给上层的消息处理管道。 Web-hosting 是基于IHttpAsyncHandler, 命名为 HttpControllerHandler, 它把 HttpRequest 转换为HttpRequestMessage.当然Web API hosting 是可扩展的,不仅仅局限于这两个选项,你可以根据自己的需求定制,社区已经有人实现第三方的宿主Louis DeJardinOWIN created a host 。 

消息处理管道(Message Handler Pipeline)

中间层是 message handler pipeline,这一部分就是 WCF Web API 的内容了,通过 HttpServer 类暴露, 他也扩展了 HttpMessageHandler 。这条管道提供了中间层的各种扩展点(addressing cross-cutting concerns)例如: 日志, HTTP 验证, ……

通常在这个管道的顶端是一个特殊的处理器: HttpControllerDispatcher。这个处理器负责获取和调用 一个  控制器(Controler) 处理请求。只是在使用基于控制器的编程模型(ApiController的派生类)的时候才使用HttpControllerDispatcher ,也可以使用完全不同的模型,只需要把最顶端的这个消息处理器替换掉就可以哦。

控制器处理(Controller Handling)

最后, 上层的控制器处理相关的流程,即:

这些处理过程都在 ApiController 实例里头完成, 被 HttpControllerDispatcher所调用。

上面的整个处理流程还是非常清晰地,本文只是简单的介绍下整个处理流程,后续的文章详细介绍各个部分。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏静默虚空的博客

Eclipse 实用技巧

代码智能提示 Java智能提示 Window -> Preferences -> Java -> Editor -> Content Assist -> Aut...

2087
来自专栏Java帮帮-微信公众号-技术文章全总结

POI导入导出【面试+工作】

POI导入导出【面试+工作】 1.场景一 近期项目中的excel导入导出功能需求频繁的出现,趁此机会,今天笔者对POI的Excel数据的导入导出做一...

3974
来自专栏烂笔头

Python爬虫—破解JS加密的Cookie

目录[-] 前言 在GitHub上维护了一个代理池的项目,代理来源是抓取一些免费的代理发布网站。上午有个小哥告诉我说有个代理抓取接口不能用了,返回状态521...

6217
来自专栏熊二哥

.NET工作准备--04ASP.NET

(已过时) ASP.NET 1.开发基础 *asp.net以什么形式运行?.net宿主的概念,ISAPI的概念,ASP.NET基本运行机制; .net宿主...

2335
来自专栏Esofar 开发日记

[译]RabbitMQ教程C#版 - 远程过程调用(RPC)

但是如果我们想要运行一个在远程计算机上的函数并等待其结果呢?这将是另外一回事了。这种模式通常被称为 远程过程调用 或 RPC 。

1390
来自专栏我的博客

max x Yosemide无法安装jdk8解决

1.下载 好jdk 1.7(1.8) 地址:http://www.oracle.com/technetwork/java/javase/downloads/in...

43113
来自专栏difcareer的技术笔记

Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)[转]include <stdio.h>int func(int a, int b, int c, int d, int e,

声明:本文转自Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码),此文干货很多。

4235
来自专栏技术点滴

远程线程注入引出的问题

远程线程注入引出的问题 一、远程线程注入基本原理 远程线程注入——相信对Windows底层编程和系统安全熟悉的人并不陌生,其主要核心在于一个Windows AP...

26410
来自专栏Ken的杂谈

基于GitLab的Code Review教程

也就是说,使用GitLab进行Code Review就是在分支合并环节发起Merge Request,然后Code Review完成后将代码合并到目标分支。

9933
来自专栏林德熙的博客

VisualStudio 扩展开发 安装 Visual Studio SDK添加菜单增加选项传到商店获取工程所有项目升级 2017

本文主要:如何开发一个 visual Studio 扩展,其实扩展也叫插件。 那么就是如何开发一个 vs插件。 本文也记录了我调试 VisualStudio 半...

1.3K2

扫码关注云+社区