前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ASP.NET Web API 处理架构

ASP.NET Web API 处理架构

作者头像
张善友
发布于 2018-01-19 08:45:05
发布于 2018-01-19 08:45:05
1.8K0
举报
文章被收录于专栏:张善友的专栏张善友的专栏

这篇文章主要是介绍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所调用。

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012-03-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ASP.NET Web API: 宿主(Hosting)
ASP.NET Web API 处理架构中介绍了ASP.NET Web API主要有三层组成:宿主(hosting),消息处理管道(message handler pipeline)和控制器处理(controller handling),本篇文章主要介绍宿主(Hosting):包括ASP.NET经典管道上的Web Hosting和WCF堆栈的自宿主SelfHosting。 ASP.NET经典管道上的Web Hosting 1、ASP.NET 路由使您可以使用不必映射到网站中特定文件的 URL。 由于该 UR
张善友
2018/01/19
1.5K0
ASP.NET Web API: 宿主(Hosting)
Self Host模式下的ASP. NET Web API是如何进行请求的监听与处理的?
构成ASP.NET Web API核心框架的消息处理管道既不关心请求消息来源于何处,也不需要考虑响应消息归于何方。当我们采用Web Host模式将一个ASP.NET应用作为目标Web API的宿主时,实际上是由ASP.NET管道解决了这两个问题。具体来说,ASP.NET自身的URL路由系统借助于HttpControllerHandler这个自定义的HttpHandler实现了ASP.NET管道和ASP.NET Web API管道之间的“连通”,但是在Self Host寄宿模式下,请求的监听、接收和响应又是如
蒋金楠
2018/01/15
1.9K0
Self Host模式下的ASP. NET Web API是如何进行请求的监听与处理的?
Asp.Net Web API(一)
          HTTP不仅仅服务于Web Pages。他也是一个创建展示服务和数据的API的强大平台。HTTP是简单的,灵活的,无处不在的。你能够想象到几乎任何的平台都会有HTTP服务库。HTTP服务可以涉及到范围广泛的客户端,包括浏览器,各种移动设备和传统桌面应用程序。而Web API是提供了一套RestfulAPI的开发框架,它提供了较为完整的http语义支持。
莫问今朝
2018/08/31
8880
总体介绍ASP.NET Web API下Controller的激活与释放流程
通过《ASP.NET Web API的Controller是如何被创建的?》我们已经对HttpController激活系统的核心对象有了深刻的了解,这些对象包括用于解析程序集和有效HttpController类型的AssembliesResolver和HttpControllerTypeResolver、根据请求完整目标HttpController选择的HttpControllerSelector、负责激活目标HttpController实例的HttpControllerActivator、以及作为IoC容
潘成涛
2019/05/25
6600
ASP.NET Web API中的Controller
虽然通过Visual Studio向导在ASP.NET Web API项目中创建的 Controller类型默认派生与抽象类型ApiController,但是ASP.NET Web API框架本身只要求它实现IHttpController接口即可,所以我们将其统称为HttpController。既然HttpController指的是所有实现了IHttpController接口的类型,我们自然得先来了解一下这个接口的定义。如下面的代码片断所示,在IHttpController接口中仅仅定义了唯一的方法Exec
蒋金楠
2018/01/15
1.7K0
ASP.NET Web API中的Controller
总体介绍ASP.NET Web API下Controller的激活与释放流程
通过《ASP.NET Web API的Controller是如何被创建的?》我们已经对HttpController激活系统的核心对象有了深刻的了解,这些对象包括用于解析程序集和有效HttpController类型的AssembliesResolver和HttpControllerTypeResolver、根据请求完整目标HttpController选择的HttpControllerSelector、负责激活目标HttpController实例的HttpControllerActivator、以及作为IoC容
蒋金楠
2018/01/15
9360
总体介绍ASP.NET Web API下Controller的激活与释放流程
Asp.Net WebApi核心对象解析(一)
本文主要介绍了ASP.NET Web API的背景、使用方法和核心对象,包括HttpRequestMessage、HttpResponseMessage、HttpClient等,并分析了如何使用这些对象来处理HTTP请求和响应。
彭泽0902
2018/01/04
4.7K0
ASP.NET Web API标准的“管道式”设计
ASP.NET Web API的核心框架是一个消息处理管道,这个管道是一组HttpMessageHandler的有序组合。这是一个双工管道,请求消息从一端流入并依次经过所有HttpMessageHandler的处理。在另一端,目标HttpController被激活,Action方法被执行,响应消息随之被生成。响应消息逆向流入此管道,同样会经过逐个HttpMessageHandler的处理。这是一个独立于寄宿环境的抽象管道,如何实现对请求的监听与接收,以及将接收的请求传入消息处理管道进行处理并将管道生成的响应
蒋金楠
2018/01/15
1.4K0
ASP.NET Web API标准的“管道式”设计
WCF Web API 说再见,继承者ASP.NET Web API
从 .NET 3.5 开始 WCF 已经支持用 WebHttpBinding 构建 RESTful Web 服务,基于 WCF 框架的 RESTful Web 服务还是建立在 WCF Message 栈上,还是基于RPC风格的,因为 REST 的工作原理有所不同,它不需要依赖 SOAP 协议,因此 WCF 消息管道对于它经过了特殊的消息优化。但 REST 集成在 WCF 消息管道上还是不理想,所以微软重新开始构造基于Http 协议特点的RESTful的Web API, 从2010年10月份开始把代码放在co
张善友
2018/01/30
1.4K0
WCF Web API 说再见,继承者ASP.NET Web API
如果调用ASP.NET Web API不能发送PUT/DELETE请求怎么办?
理想的RESTful Web API采用面向资源的架构,并使用请求的HTTP方法表示针对目标资源的操作类型。但是理想和现实是有距离的,虽然HTTP协议提供了一系列原生的HTTP方法,但是在具体的网络环境中,很多是不支持的。比如有的浏览器只能发送GET和POST请求,客户端发送的PUT请求也不一定能够被服务器理解。除了客户端和服务器对请求采用的HTTP方法的制约外,像代理(Proxy)、网关(Gateway)等这些中间部件都具有针对HTTP方法的限制。[本文已经同步到《How ASP.NET Web API
蒋金楠
2018/09/28
1.6K0
Asp.net web api 知多少
本系列主要翻译自《ASP.NET MVC Interview Questions and Answers 》- By Shailendra Chauhan,想看英文原版的可访问http://www.dotnettricks.com/free-ebooks自行下载。该书主要分为两部分,ASP.NET MVC 5、ASP.NET WEB API2。本书最大的特点是以面试问答的形式进行展开。通读此书,会帮助你对ASP.NET MVC有更深层次的理解。 由于个人技术水平和英文水平也是有限的,因此错误在所难免,希
圣杰
2018/01/11
5.2K0
Asp.net web api 知多少
WCF和ASP.NET Web API在应用上的选择
在最近发布的Visual Studio 2012及.NET 4.5中, 微软正式推出新的网络服务框架ASP.NET Web API。作为ASP.NET MVC 4的一部分,ASP.NET Web API这套开源框架的设计目的是简化RESTful服务的开发和使用。 ASP.NET Web API 与之前的内建HTTP服务解决方案的不同之处在于,它一开始就是围绕HTTP协议及其消息语义构建起来的。与WCF REST或ASP.NET AJAX加ASMX相比,它不是对现有框架的增强,而是一个全新的平台。新的ASP.
张善友
2018/01/29
1.6K0
MVC和Webapi的区别
Mvc主要用于构建网站,在后端实现了一套完整的MVC开发框架,默认使用Razor视图引擎。
小蜜蜂
2019/08/20
3.3K0
Asp.Net Web API 2第四课——HttpClient消息处理器
    Asp.Net Web API第一课:入门http://www.cnblogs.com/aehyok/p/3432158.html
aehyok
2018/08/31
6230
Asp.Net Web API 2第四课——HttpClient消息处理器
Asp.Net WebApi核心对象解析(二)
彭泽0902
2018/01/04
3.3K0
ASP.NET Web API路由系统:Web Host下的URL路由
ASP.NET Web API提供了一个独立于执行环境的抽象化的HTTP请求处理管道,而ASP.NET Web API自身的路由系统也不依赖于ASP.NET路由系统,所以它可以采用不同的寄宿方式运行于不同的应用程序中。如果采用Web Host的方式将定义Web API寄宿于一个Web应用之中,其实最终的URL路由还是通过ASP.NET本身的路由系统完成的,那么两个路由系统之间是如何衔接在一起的呢?。 目录 一、HostedHttpRoute 二、HttpWebRoute
蒋金楠
2018/01/15
1.7K0
跨域资源共享(CORS)在ASP.NET Web API中是如何实现的?
在《通过扩展让ASP.NET Web API支持W3C的CORS规范》中,我们通过自定义的HttpMessageHandler自行为ASP.NET Web API实现了针对CORS的支持,实际上ASP.NET Web API自身也是这么做的,该自定义HttpMessageHandler就是System.Web.Http.Cors.CorsMessageHandler。 1: public class CorsMessageHandler : DelegatingHandler 2: {
蒋金楠
2018/01/15
2.7K0
跨域资源共享(CORS)在ASP.NET Web API中是如何实现的?
Asp.Net Web API 2第五课——Web API路由
    Asp.Net Web API第一课——入门 http://www.cnblogs.com/aehyok/p/3432158.html
aehyok
2018/08/31
1.3K0
Asp.Net Web API 2第五课——Web API路由
ASP.NET Web API 应用教程(一) ——数据流使用
相信已经有很多文章来介绍ASP.Net Web API 技术,本系列文章主要介绍如何使用数据流,HTTPS,以及可扩展的Web API 方面的技术,系列文章主要有三篇内容。 主要内容如下: I  数据流 II 使用HTTPS III 可扩展的Web API 文档 项目环境要求 VS 2012(SP4)及以上, .Net 框架4.5.1 Nuget包,可在packages.config 文件中查寻 本文涉及的知识点 ActionFilter AuthorizationFilter DelegateHand
葡萄城控件
2018/01/10
2.4K0
ASP.NET  Web API 应用教程(一) ——数据流使用
ASP.NET Web API 支持 CORS
Cross-Origin Resource Sharing (CORS) 是W3C草案拟定的浏览器与服务端如何进行跨域请求的方式,其原理是用自定义HTTP头来让浏览器和SERVER决定request、response的成功或失败。目前几乎所有浏览器都已经支持了(Internet Explorer 8+, Firefox 3.5+, Safari 4+, and Chrome)。 使用一个GET或POST发送一个未自定义头的请求时,会额外添加一个叫做Origin的头,其包含了请求页面的协议、域名和端口,后台可
张善友
2018/01/22
1.6K0
相关推荐
ASP.NET Web API: 宿主(Hosting)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档