ASP.NET Web API 處理架構

這篇文章主要是介紹ASP.NET Web API的處理架構:當一個HTTP請求到達直到產生一個請求的過程。ASP.NET Web API 的處理架構圖如下,主要有三層組成:宿主(hosting),消息處理管道(message handler pipeline)和控制器處理(controller handling).

processing-architecture?

宿主(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 DeJardin在OWIN?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)

最后, 上層的控制器處理相關的流程,即:

  • Action selection;
  • Filter execution;
  • Model binding;
  • Action invocation;
  • Response content creation via formatters.

這些處理過程都在 ApiController 實例里頭完成, 被 HttpControllerDispatcher所調用。

上面的整個處理流程還是非常清晰地,本文只是簡單的介紹下整個處理流程,后續的文章詳細介紹各個部分。

轉載于:https://www.cnblogs.com/shanyou/archive/2012/03/17/2404180.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379885.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379885.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379885.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python---可執行文件的轉換

pyinstaller是常見的執行文件打包工具。該工具的安裝方式非常簡單,可運行在windows、MacOS X和GNU/Linux操作系統環境中,執行python2和python3。 用pyinstaller打包的執行文件,只能在于執行打包操作的系統類型相同的環境下運行。也就是說&…

Java——集合的遍歷之迭代遍歷

這些是下面的代碼中所涉及到的所有方法&#xff1a;* 迭代概述:* 集合是用來存儲元素&#xff0c;存儲的元素需要查看&#xff0c;那么就需要迭代(遍歷)* 也就是說&#xff0c;迭代就是遍歷* * public interface Iterator<E> 對 collection 進行迭代的迭代器* …

數組排序最小復雜度_進行排序的最小缺失數

數組排序最小復雜度Problem statement: 問題陳述&#xff1a; Given an array of n integers. Find the minimum number of elements from the array to remove or delete so that when the remaining elements are placed in the same sequence order form a sorted sequence…

輕松掌握Windows窗體間的數據交互(轉載)

輕松掌握Windows窗體間的數據交互作者&#xff1a;鄭佐日期&#xff1a;2004-04-05Windows 窗體是用于 Microsoft Windows 應用程序開發的、基于 .NET Framework 的新平臺。此框架提供一個有條理的、面向對象的、可擴展的類集&#xff0c;它使您得以開發豐富的 Windows 應用程序…

MATLAB安裝問題解決方案大集錦

我的安裝后的兩個問題 第一個&#xff1a;“Microsoft Visual C Runtime LibraryRuntime Error!Program:C:\Matlab7\Rin\Win32\Matlab.exeThis application has requested the runtime to terminate it in an unusual way.Please contact the applications support team for mo…

python免殺技術---shellcode的加載與執行

0x01 生成shellcode 首先通過下列命令生成一個shellcode&#xff0c;使用msfvenom -p選項來指定paylaod&#xff0c;這里選用windows/x64、exec模塊接收的參數。使用calc.exe執行彈出計算器的操作。-f選項用來執行生成的shellcdoe的編譯語言。 msfvenom -p windows/x64/exec …

成對的歌曲,其總持續時間可被60整除

Problem statement: 問題陳述&#xff1a; In a list of songs, the i-th song has duration of time[i] seconds. Return the number of pairs of songs for which their total duration in seconds is divisible by 60. Formally, we want the number of indices i < j w…

Qt中QTableWidget用法總結

QTableWidget是QT程序中常用的顯示數據表格的空間&#xff0c;很類似于VC、C#中的DataGrid。說到QTableWidget&#xff0c;就必須講一下它跟QTabelView的區別了。QTableWidget是QTableView的子類&#xff0c;主要的區別是QTableView可以使用自定義的數據模型來顯示內容(也就是先…

[轉]軟件架構師書單

"其實中國程序員&#xff0c;現在最需要的是一張安靜的書桌。"&#xff0c;的確&#xff0c;中國架構師大多缺乏系統的基礎知識&#xff0c;與其自欺欺人的宣揚"讀書無用&#xff0c;重在實踐變通&#xff0c;修身立命哲學書更重要"&#xff0c;把大好時間…

Java——List集合特有的功能

* List也是一個接口&#xff0c;這說明List不能new&#xff0c;其中它有一個子類ArrayList&#xff0c;所以&#xff0c;就可以父類引用指向子類對象調用* List里面特有的方法&#xff1a;* * void add(int index,E element)在列表的指定位置插入指定元素&#xff08;可選操作&…

python免殺技術---復現+改進----1

0x01 復現 復現文章&#xff1a;https://mp.weixin.qq.com/s?__bizMzI3MzUwMTQwNg&mid2247484733&idx2&sn5b8f439c2998ce089eb44541d2da7a15&chksmeb231%E2%80%A6 首先用cobaltstruke生成一個python的payload腳本 然后復制里面的payload進行Base64編碼&…

python擲骰子_用于擲骰子的Python程序(2人骰子游戲)

python擲骰子Here, we will be going to design a very simple and easy game and implement it using abstract data class. The code consists of two different classes (The base of the whole program). The one will be the class for the player and others will be for…

ForeignKey和ManyToManyField的限制關系

authorsmodels.ManyToManyField(Author,limit_choice_to{name__endswith:Smith}這樣可以更方便的查詢。轉載于:https://www.cnblogs.com/chenjianhong/archive/2012/03/22/4145158.html

linux 目錄命令_Linux目錄命令能力問題和解答

linux 目錄命令This section contains Aptitude Questions and Answers on Linux Directory Commands. 本節包含有關Linux目錄命令的 Aptitude問答。 1) There are the following statements that are given which of them are correct about Linux commands? In the Linux o…

終于在HP2133上成功安裝xp

今天拿到一臺HP2133迷你筆記本&#xff0c;原裝vista home basic&#xff0c;由于本人是在不喜歡vista&#xff0c;于是決定將使用xp換之。 很久沒有研究裝系統了&#xff0c;HP2133沒有光驅&#xff0c;以前也沒啥這方面經驗&#xff0c;搞這個玩意安裝完軟件折騰了大半天&…

Java——GUI(圖形用戶界面設計)

事件處理&#xff1a;事件&#xff1a;用戶的一個操作(例如&#xff1a;點擊一下鼠標&#xff0c;或者敲擊一下鍵盤)事件源&#xff1a;被操作的組件(例如&#xff1a;在一個窗體中的一個按鈕&#xff0c;那個按鈕就屬于被操作的組件&#xff0c;按鈕就是事件源)監聽器&#xf…

python安全攻防---信息收集---IP查詢

IP查詢是通過當前所獲得的URL去查詢對應IP地址的過程&#xff0c;可應用Socket庫函數中的gethostbyname()獲取域名所對用的IP值 程序如下&#xff1a; # -*- coding:utf-8 -*- IP查詢import socket ip socket.gethostbyname(www.baidu.com) print(ip)運行結果&#xff1a; …

智能課程表Android版-學年學期星期的實現

上次我們實現了日期和時間的動態顯示&#xff0c;這次我們來實現學年&#xff0c;學期&#xff0c;周次的顯示&#xff0c;如圖: 首先是學年學期的顯示&#xff1a; Calendar cCalendar.getInstance(); int yearc.get(Calendar.YEAR); int monthc.get(Calendar.MONTH)1;//Calen…

感染linux腳本程序技術

前言 ---- 本文來源于29A病毒雜志,其上對linux shell病毒技術有了一個綜合的闡述,我不想翻譯它,我以它的那篇為模板 寫了這篇中文的文章,里面的代碼我都做了調試. 對于shell編程的程序員來說所謂的shell病毒技術其實根本就是小牛一毛,這點在大家看完本文后就會有所體會 但,簡單…

Java——設計模式(簡單工廠模式)

* A:簡單工廠模式概述* 簡單工廠模式又叫靜態工廠方法模式&#xff0c;它定義了一個具體的工廠類負責創建一些類的實例* B&#xff1a;優點* 客戶端不需要再負責對象的創建&#xff0c;從而明確了各個類的職責* 簡單來說&#xff0c;客戶端你只需要用就可以了&#xff0c;就…