AspDotNet WebAPI及相關(guān)技術(shù)介紹課件_第1頁
AspDotNet WebAPI及相關(guān)技術(shù)介紹課件_第2頁
AspDotNet WebAPI及相關(guān)技術(shù)介紹課件_第3頁
AspDotNet WebAPI及相關(guān)技術(shù)介紹課件_第4頁
AspDotNet WebAPI及相關(guān)技術(shù)介紹課件_第5頁
已閱讀5頁,還剩80頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、Asp.Net WebAPI 及相關(guān)技術(shù)介紹劉振東2014/12/252022/9/141這個PPT涉及到的技術(shù)本文講的其實是Web服務(wù)技術(shù)發(fā)展史,共87多頁,WebAPI在講到第37頁的時候才會出現(xiàn),因為這個技術(shù)不是憑空產(chǎn)生的,它有著自己的演變進(jìn)化的歷史。我們要先弄清它從哪里來的?然后再說它能做什么事。這個PPT涉及到的技術(shù)名詞有: XML-RPC,SOAP,REST, SOA Asp.Net WebForm,WebService, WCF Asp.Net WebAPI, Asp.Net MVC,JSON Asp.Net Routing, MVVM,DOM HttpModule, HttpH

2、andler, Ajax Jquery JS,Knockout JS2022/9/142內(nèi)容提綱三種Web服務(wù)主流架構(gòu)的歷史演變與示例。(XML-RPC,SOAP,REST)2. REST興起與Asp.Net WebAPI介紹。3. Asp.Net WebAPI與相關(guān)技術(shù)比較及SOA 。4. 與WebAPI配合的前端JS開發(fā)框架介紹(Knockout與jQuery)。2022/9/143Asp.Net WebAPI 是什么? Asp.Net WebAPI 是一種Web服務(wù),是服務(wù)器端的技術(shù),要想說清它,就要先把Web服務(wù)三種主流架構(gòu)XML-RPC,SOAP,REST交代一下!2022/9/14

3、4三種主流Web服務(wù)架構(gòu) - XML-RPCRPC是Remote Procedure Call的縮寫,中文是遠(yuǎn)程過程調(diào)用,是一種在本地的機(jī)器上調(diào)用遠(yuǎn)端機(jī)器上的一個過程(方法)的技術(shù),這個過程也被大家稱為“分布式計算”,是為了提高各個分立機(jī)器的“互操作性”而發(fā)明出來的技術(shù)。一個RPC系統(tǒng),必然包括2個部分: 1.RPC Client,用來向RPC Server調(diào)用方法, 并接收方法的返回數(shù)據(jù); 2.RPC Server,用于響應(yīng)RPC Client的請求,執(zhí)行方法,并回送方法執(zhí)行結(jié)果。 顧名思義,XML-RPC就是應(yīng)用了XML技術(shù)的RPC,它是一種使用Http協(xié)議做為傳輸協(xié)議的遠(yuǎn)程過程調(diào)用(Re

4、mote Procedure Call,RPC)機(jī)制,使用Xml文本的方式傳輸命令和數(shù)據(jù)。后來在新的功能不斷被引入下,這個標(biāo)準(zhǔn)慢慢演變成為今日的SOAP。在RPC中,調(diào)用雙方傳遞的數(shù)據(jù)常用二進(jìn)制,而在XML-RPC中數(shù)據(jù)將是XML格式的。那么為什么用XML而不用二進(jìn)制呢?我想一方面是為了兼容更多的語言,因為這個世界上除了C/C+等編譯語言,還有很多其他語言,另一方面是為了隔離操作系統(tǒng)的差異,比如說Little Endian和Big Endian的差異等?;诜N種原因,XML-RPC選擇了XML這種中間語言作為其信息的格式,然后由各個語言負(fù)責(zé)將其轉(zhuǎn)變成各自native(本土)的數(shù)據(jù)類型。2022

5、/9/145三種主流Web服務(wù)架構(gòu) - SOAPSOAP:簡單對象訪問協(xié)議(Simple Object Access Protocol)是一種標(biāo)準(zhǔn)化的通訊規(guī)范,主要用于Web服務(wù)(Web Service)中。例如:一個 SOAP 消息可以發(fā)送到一個具有 Web Service 功能的 Web 站點,后臺有數(shù)據(jù)庫,消息的參數(shù)中標(biāo)明這是一個查詢消息,此站點將返回一個 XML 格式的信息,其中包含了查詢結(jié)果,由于數(shù)據(jù)是用一種標(biāo)準(zhǔn)化的可分析的結(jié)構(gòu)來傳遞的,所以可以直接被第三方站點所利用。SOAP具體技術(shù)實現(xiàn): WebService, WCF2022/9/147為什么需要SOAP?大型企業(yè)中信息系統(tǒng)大多

6、數(shù)為多平臺、多系統(tǒng)的復(fù)雜系統(tǒng)。這就要求今天的企業(yè)解決方案具有廣泛的兼容能力,可以支持不同的系統(tǒng)平臺、數(shù)據(jù)格式和多種連接方式。對于部署各種平臺上的各式各樣的程序開發(fā)來說,能在程序之間進(jìn)行因特網(wǎng)通信是很重要的。以前應(yīng)用程序通過使用遠(yuǎn)程過程調(diào)用(RPC)在諸如 DCOM 與 CORBA 等對象之間進(jìn)行通信,但是 RPC 會產(chǎn)生兼容性以及安全問題;防火墻和代理服務(wù)器通常會阻止此類流量。而通過 HTTP 在應(yīng)用程序間通信是更好的方法,因為 HTTP 得到了所有的因特網(wǎng)瀏覽器及服務(wù)器的支持。SOAP 就是被創(chuàng)造出來完成這個任務(wù)的。SOAP 提供了一種標(biāo)準(zhǔn)的方法,使得運行在不同的操作系統(tǒng)并使用不同的技術(shù)和編

7、程語言的應(yīng)用程序可以互相進(jìn)行通信。2022/9/148SOAP 消息的基本結(jié)構(gòu) . . . . . . 2022/9/1410Soap的請求例子POST /InStock HTTP/1.1 Host: Content-Type: application/soap+xml; charset=utf-8 Content-Length: nnn IBM 2022/9/1411Soap的響應(yīng)例子HTTP/1.1 200 OK Content-Type: application/soap+xml; charset=utf-8 Content-Length: nnn 34.5 2022/9/1412三種主

8、流架構(gòu)的關(guān)系三者目的相同:都是為了實現(xiàn)RPC中的消息交換,為了更方便在網(wǎng)絡(luò)中傳輸,而且由于HTTP的無狀態(tài)性,都使得HTTP為這三者的常用的傳輸協(xié)議。發(fā)展史:從之前的各個專有系統(tǒng)之間不能數(shù)據(jù)交換,到專有的XML-RPC, 后來XML-RPC慢慢的被通用的SOAP開發(fā)方式所取代,為了進(jìn)一步簡化,就出現(xiàn)了REST,可以使用操作更簡單的JSON替代較復(fù)雜的XML。發(fā)展趨勢:目前在三種主流的Web服務(wù)實現(xiàn)方案中,因為REST模式的Web服務(wù)與復(fù)雜的SOAP和XML-RPC對比來講明顯的更加簡潔,越來越多的Web服務(wù)開始采用REST風(fēng)格設(shè)計和實現(xiàn)。2022/9/1414首先回顧一下傳統(tǒng)的Web服務(wù)Web

9、 service也叫XML Web Service, 它通過標(biāo)準(zhǔn)化接口(WSDL)提供,使用標(biāo)準(zhǔn)化語言(XML)進(jìn)行描述,并可基于標(biāo)準(zhǔn)化傳輸方式(HTTP和JMS)、采用標(biāo)準(zhǔn)化 協(xié)議(SOAP)進(jìn)行調(diào)用,并使用XML SCHEMA方式對數(shù)據(jù)進(jìn)行描述,它有什么好處呢?第一,Web Service是跨平臺的,應(yīng)用程序經(jīng)常需要從運行在IBM主機(jī)上的程序中獲取數(shù)據(jù),然后把數(shù)據(jù)發(fā)送到主機(jī)或UNIX應(yīng)用程序中去。即使在同一個平臺上, 不同軟件廠商生產(chǎn)的各種軟件也常常需要集成起來。通過WebService,應(yīng)用程序可以用標(biāo)準(zhǔn)的方法把功能和數(shù)據(jù)“暴露”出來,供其它應(yīng)用程序使用。第二,Web Service是無

10、語言限制的,你可以使用.NET,JAVA,PHP,VB等多種語言開發(fā)并進(jìn)行相互調(diào)用。第三, 使用SOAP時數(shù)據(jù)是以ASCII文本的方式傳輸,調(diào)用很方便,數(shù)據(jù)容易通過防火墻而實現(xiàn)無縫連接。2022/9/1415一個Web服務(wù)的例子using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Services;namespace WebServiceSoap public class Service1 : System.Web.Services.WebService

11、 WebMethod public string HelloWorld() return Hello World; 2022/9/1417用JS調(diào)用Web Service的例子/這是我們創(chuàng)建的Web服務(wù)的地址var URL = “http:/localhost/YBWS/WebService.asmx”;/在這處拼接Http請求內(nèi)容var data;data = ;data = data + ;data = data + ;data = data + ;data = data + ;data = data + ;/創(chuàng)建異步對象var xmlhttp = new ActiveXObject(Mi

12、crosoft.XMLHTTP);xmlhttp.Open(POST, URL, false);xmlhttp.SetRequestHeader(Content-Type, application/soap+xml);xmlhttp.Send(data);2022/9/1418對Web服務(wù)的Http請求POST 8:9003/Service1.asmx HTTP/1.1Host: 8:9003Content-Type: application/soap+xml; charset=utf-8Content-Length: 314 2022/9/1419對Web服務(wù)的Http響應(yīng)HTTP/1.1

13、200 OKCache-Control: private, max-age=0Content-Type: application/soap+xml; charset=utf-8Server: Microsoft-IIS/8.5X-AspNet-Version: 2.0.50727X-Powered-By: ASP.NETDate: Mon, 08 Dec 2014 02:15:12 GMTContent-Length: 361 Hello World 2022/9/1420說完Web服務(wù),就輪到WCF了Windows Communication Foundation( WCF),是微軟通用的服

14、務(wù)架構(gòu)平臺,其目的在于創(chuàng)建一個通用的Web Service平臺,可以在各種不同的協(xié)議(TCP, UDP, HTTP)下使用,僅僅通過EndPoint的配置而不需要修改代碼實現(xiàn)就能適應(yīng)不同的工作環(huán)境,從而降低了分布式系統(tǒng)開發(fā)者的學(xué)習(xí)曲線,并統(tǒng)一開發(fā)標(biāo)準(zhǔn)。它的好處呢?第一,開發(fā)的統(tǒng)一性。WCF是對于ASMX, Remoting,Enterprise Service,WSE,MSMQ,TCP開發(fā)等技術(shù)的整合。WCF是由托管代碼編寫,無論你是使用TCP通訊,Rmoting通訊還是Web Service ,我們都可以使用統(tǒng)一的模式進(jìn)行開發(fā),利用WCF來創(chuàng)建面向服務(wù)的應(yīng)用程序。第二,WCF能夠?qū)崿F(xiàn)多方互操

15、作。它是使用 SOAP通信機(jī)制,這就保證了系統(tǒng)之間的互操作性,即使是運行不同開發(fā)語言,也可以跨進(jìn)程、跨機(jī)器甚至于跨平臺的通信。例如:使用J2EE的服務(wù)器(如WebSphere,WebLogic),應(yīng)用程序可以在Windows操作系統(tǒng)進(jìn)行調(diào)用,也可以運行在其他的 操作系統(tǒng),如Sun Solaris,HP Unix,Linux等等。第三,提供高效的安全與可信賴度,它可以使用不同的安全認(rèn)證將WS-Security,WS-Trust和WS-SecureConversation等添加到SOAP消息中。2022/9/1421WCF的另一個好處WCF要求客戶端保持一致的編程方式,不用考慮服務(wù)的位置。不管服務(wù)

16、部署在本機(jī)上還是別的機(jī)器上,WCF不允許客戶端直接與服務(wù)交互,即使它調(diào)用的是本地機(jī)器內(nèi)存中的服務(wù),WCF仍然使用遠(yuǎn)程編程模型的實例化方式,并使用代理。因而對于本地和遠(yuǎn)程方式而言,WCF都只需要維持相同的編程模型。這就使得開發(fā)者不會因為服務(wù)位置的改變影響客戶端,同時還大大地簡化了應(yīng)用程序的編程模型。2022/9/1422WCF具體實例-數(shù)據(jù)合約using System;namespace TerminalService DataContract public class NightServerAddress string dayNightFlag = “D; string wfValue = S

17、tring.Empty; string queueValue = String.Empty; DataMember public string DayNightFlag get return dayNightFlag; set dayNightFlag = value; DataMember public string wf get return wfValue; set wfValue = value; DataMember public string queue get return queueValue; set queueValue = value; 2022/9/1424WCF具體實

18、例-服務(wù)具體代碼using System;using System.Collections.Generic;using System.Linq;using System.Runtime.Serialization;using System.ServiceModel;using System.ServiceModel.Web;using System.Text;using System.Data.SqlClient;using System.Configuration;using System.Data;namespace TerminalService public class Termina

19、lService : ITerminalService public NightServerAddress GetDayNightFlagAndNightServer() NightServerAddress obj = new NightServerAddress(); obj.DayNightFlag = D; obj.wf=8:8008; obj.queue=8:8009; return NightServerAddress; 2022/9/1425WCF具體實例-Http請求POST 8:9999/TerminalService.svc HTTP/1.1Content-Type: te

20、xt/xml; charset=utf-8SOAPAction: /ITerminalService/GetDayNightFlagHost: 8:9999Content-Length: nnnExpect: 100-continueConnection: Keep-Alive /IService1/GetDayNightFlagAndNightServer 2022/9/1427WCF具體實例-Http響應(yīng)HTTP/1.1 200 OKContent-Type: text/xml; charset=utf-8Server: Microsoft-IIS/8.5X-Powered-By: ASP

21、.NETDate: Mon, 08 Dec 2014 04:03:41 GMTContent-Length: nnn D 8:8008 8:8009 2022/9/1428Web服務(wù)和WCF的反思回味一下Web服務(wù)和WCF就可以發(fā)現(xiàn),他們雖然使用了HTTP協(xié)議,但是其實建立在 SOAP 上,以至于我們提到 Web 服務(wù)就會想到 SOAP,也就是說,他們并沒有直接建立在 HTTP上,僅僅使用HTTP作為一種夾帶其他的應(yīng)用協(xié)議穿越防火墻的方法,可以說,他們沒有充分挖掘并利用HTTP協(xié)議。2000年時,有個家伙思考了一下, HTTP協(xié)議(HyperText Transfer Protocol,超文本

22、傳輸協(xié)議),它并不是被設(shè)計為一種傳輸協(xié)議,它是一種轉(zhuǎn)移協(xié)議非常不幸,HTTP傳入我國時,即被翻譯為“超文本傳輸協(xié)議”,因為Transfer也有“傳輸”的含意,但其本意是轉(zhuǎn)移。在HTTP協(xié)議中,消息通過在那些資源的表述上的轉(zhuǎn)移和操作,來對資源執(zhí)行一些動作,從而反映出Web架構(gòu)的語義,因此使用這個非常簡單的接口來獲得廣泛的功能是完全有可能的。2022/9/1429REST崛起表述化狀態(tài)轉(zhuǎn)移 (Representational State Transfer,簡稱REST )是Roy Thomas Fielding博士在2000年他的論文中提出來的一種軟件架構(gòu)風(fēng)格。REST軟件架構(gòu)風(fēng)格迅速成為當(dāng)今世界

23、上最成功的互聯(lián)網(wǎng)的超媒體分布式系統(tǒng)。它讓人們真正理解我們的網(wǎng)絡(luò)協(xié)議HTTP本來面貌。它正在成為網(wǎng)絡(luò)服務(wù)的主流技術(shù)。REST軟件架構(gòu)是一個抽象的概念,是一種為了實現(xiàn)這一互聯(lián)網(wǎng)的超媒體分布式系統(tǒng)的行動指南。利用任何的技術(shù)都可以實現(xiàn)這種理念。而實現(xiàn)這一軟件架構(gòu)最著名的就是HTTP協(xié)議。通常我們把REST也寫作為REST/HTTP,在實際中往往把REST理解為基于HTTP的REST軟件架構(gòu)。盡管網(wǎng)絡(luò)服務(wù)目前是以SOAP技術(shù)為主,但是REST將是是網(wǎng)絡(luò)服務(wù)的另一選擇,并且是真正意義上的網(wǎng)絡(luò)服務(wù)?;赟OAP的Web Service實現(xiàn)技術(shù)和相關(guān)代碼,雖然較為成熟,且安全性較好,但是使用門檻較高,而且在大

24、并發(fā)情況下可能會有性能問題。目前在三種主流的Web服務(wù)實現(xiàn)方案中,因為REST模式與復(fù)雜的SOAP和XML-RPC相比更加簡潔,越來越多的Web服務(wù)開始采用REST風(fēng)格設(shè)計和實現(xiàn)。2022/9/1430REST基本概念及釋義REST兩個基本概念是: 1.資源(Resource):將信息抽象為資源,任何能夠命名的信息(包括數(shù)據(jù)和功能)都能作為一個資源,一張圖片,一個其他資源的集合等。在REST中,資源又叫做狀態(tài),因為它跟隨時間的變化。2.表述(Representation): REST通過URI來獲得資源的表述并對資源執(zhí)行動作,并在組件間傳遞該表述。什么是表述化狀態(tài)轉(zhuǎn)移?在REST中,資源就是狀

25、態(tài),互聯(lián)網(wǎng)就是一個巨大的狀態(tài)機(jī):每個網(wǎng)頁是其一個狀態(tài);Url是狀態(tài)的表述;REST應(yīng)用通過點擊超鏈接,從一個狀態(tài)遷移到下一個狀態(tài)的狀態(tài)轉(zhuǎn)移過程,就叫轉(zhuǎn)移。例如:Bing搜索結(jié)果的分頁列表,url如下:第一頁:/search?q=REST&hl=zh-CN&newwindow=1&start=0&sa=N 第二頁:/search?q=REST&hl=zh-CN&newwindow=1&start=10&sa=N 在Bing中,把搜索結(jié)果的每一頁視為資源(狀態(tài)),并通過url來表示(這就是表述),同一搜索關(guān)鍵字的不同分頁通過start參數(shù)來進(jìn)行區(qū)分。當(dāng)你從第一頁點擊第二頁的鏈接時,只是從一個狀態(tài)跳

26、到了下一個狀態(tài)而已(這就是轉(zhuǎn)移);2022/9/1431REST風(fēng)格架構(gòu)的主要約束條件1.客戶-服務(wù)器:分離關(guān)注點,將用戶接口(如用戶界面)和數(shù)據(jù)存儲分離,如果接口不變,組件可獨立進(jìn)化。2.無狀態(tài):從客戶端道服務(wù)器的每個請求必須包含理解該請求所必需的所有信息,不能利用任何存儲在服務(wù)器上的上下文。提高了系統(tǒng)的可擴(kuò)展性,其優(yōu)點有三:可見性,監(jiān)視系統(tǒng)不必為了確定一個請求的性質(zhì)而去查看請求之外的多個請求;可靠性,減輕了從局部故障恢復(fù)的任務(wù)量,可以快速定位;可伸縮性,不必在多個請求之 間保存狀態(tài),允許服務(wù)器快速釋放資源,并且服務(wù)器不必跨請求管理資源。缺點是,由于不能將狀態(tài)保存在服務(wù)器上的共享上下文中,增

27、加了請求中發(fā)送的重復(fù)數(shù) 據(jù),降低網(wǎng)絡(luò)性能,因此有了約束三。3.緩存:請求響應(yīng)中的數(shù)據(jù)顯示或隱式的標(biāo)記為可緩存的或不可緩存的。緩存可以為以后相同的請求重用這個響應(yīng)的數(shù)據(jù)。但是緩存管理不好,會降低可靠性,導(dǎo)致緩存中陳舊的數(shù)據(jù)與直接訪問服務(wù)器得到的數(shù)據(jù)差別很大。4.統(tǒng)一接口:組件之間要有統(tǒng)一的接口,是REST風(fēng)格架構(gòu)區(qū)別其他風(fēng)格架構(gòu)的核心特征。REST由四個接口約束定義:資源的識別,Web-Based系統(tǒng)中資源由URI表示,數(shù)據(jù)庫存儲系統(tǒng)中資源可以是XML,JSON等;通過表述對資源執(zhí)行的動作:表述中包含操作該資源的信息,如增刪改查,映射到HTTP協(xié)議的GET,POST,PUT,DELETE方法;自

28、描述的消息:消息中包含如何處理該消息的信息,如由哪個WebAPI/Sevlet處理,響應(yīng)中包含可不可以被緩存等信息;作為應(yīng)用狀態(tài)引擎的超媒體。2022/9/1432REST基本設(shè)計原則原則一: 使用HTTP的方法進(jìn)行資源訪問使用HTTP POST方法去創(chuàng)建資源,使用GET方法去讀取資源,使用PUT 方法去更新資源,使用DELETE方法去刪除資源。原則二: 使用無狀態(tài)/無會話的服務(wù)設(shè)計很長時間以來,人們采用有狀態(tài)的服務(wù)設(shè)計從而在客戶端與服務(wù)端的多次交互中維護(hù)一定的上下文。然而,有狀態(tài)的設(shè)計使得程序很難隨著工作負(fù)載的增加而進(jìn)行伸縮。比如某個服務(wù)實例擁有10000個會話的狀態(tài),則通常很難通過增加服務(wù)

29、實例來分擔(dān)其工作負(fù)載:工作負(fù)載被鎖定了! 反之,如果程序被設(shè)計成一個無狀態(tài)的,則可以自由增加服務(wù)實例,并且在這些實例之間平衡負(fù)載,從而使得服務(wù)具有較好的伸縮性,這在大規(guī)模分布式系統(tǒng)中尤其重要!原則三: 用目錄結(jié)構(gòu)風(fēng)格的URL設(shè)計來表示資源用清晰的URL路徑表示資源可以使客戶端更容易理解和操作資源。URL可以被看作是一種自我解釋的接口,不需要太多解釋就可以讓人明白該URL指向的是什么資源以及如何獲得相關(guān)的資源。/research/articles/article_title/research/articles/year/month/day/article_title原則四: 使用XML或JSON

30、來傳輸數(shù)據(jù)服務(wù)和請求的消息數(shù)據(jù)中包含了對于資源的屬性的描述,服務(wù)應(yīng)該采取結(jié)構(gòu)良好并且易于閱讀的方式來描述資源。XML、JSON都是結(jié)構(gòu)良好的語言,并適于閱讀。JSON比XML更加簡潔。2022/9/1433什么是JSON?JSON:JavaScript 對象表示法(JavaScript Object Notation) ,是一種輕量級的數(shù)據(jù)交換格式,采用完全獨立于語言的文本格式,是存儲和交換文本信息的語法,用途類似 XML,但JSON 比 XML 更小、更快,更易解析。這些特性使JSON成為理想的數(shù)據(jù)交換語言。易于人閱讀和編寫,同時也易于機(jī)器解析和生成。JSON它基于JavaScript(St

31、andard ECMA-262 3rd Edition - December 1999)的一個子集,也就是JavaScript 原生格式,這意味著在 JavaScript 中處理 JSON 數(shù)據(jù)不需要任何特殊的 API 或工具包。在JS和Ajax這種特定的領(lǐng)域,未來的發(fā)展是XML讓位于JSON。JSON例子: var obj= name:Bill Gates, street:Fifth Avenue New York 666, age:56 ; document.getElementById(jname).innerHTML= 2022/9/1434REST安全性REST/HTTP網(wǎng)絡(luò)服務(wù)直接

32、暴露在客戶端面前,如何確保服務(wù)的安全?1.REST/HTTP網(wǎng)絡(luò)服務(wù)的信息包可以被防火墻理解和控制。你可以按照操作和鏈接進(jìn)行過濾信息包,如你可以規(guī)定從外部來的只能讀取(GET操作)自己服務(wù)器的資源。這樣對于系統(tǒng)管理員而言使得軟件管理更為簡單。2.REST的安全性還可以利用傳輸安全協(xié)議SSL/TLS、 HTTP基本認(rèn)證和摘要式認(rèn)證。HTTP基本認(rèn)證優(yōu)點是邏輯簡單明了、設(shè)置簡單。缺點顯而易見,即使是BASE64后也是可見的明文,很容易被破解、非法利用。還有就是HTTP是無狀態(tài)的,同一客戶端每次都需要驗證。對Http認(rèn)證的不安全的缺點來說,可以啟用HTTPS(SSL/TLS)認(rèn)證作為補(bǔ)充。摘要認(rèn)證(

33、digest authentication)優(yōu)點是摘要驗證很好地解決了使用基本驗證所擔(dān)心的安全性問題。但是永遠(yuǎn)沒有絕對的安全,當(dāng)用戶使用字典進(jìn)行窮舉破解時,還是會存在一些被破解的隱患。3.還可以利用像基于信息的Web Services Security作為安全認(rèn)證的補(bǔ)充方案。 4.除此之外,還可以利用第三方開源的OpenID和Oauth類庫作為安全認(rèn)證方案的選擇。2022/9/1435真主降臨,Asp.Net WebAPI發(fā)布在Visual Studio 2012及.NET 4.5中,作為ASP.NET MVC 4的一部分,微軟正式推出新的網(wǎng)絡(luò)服務(wù)框架ASP.NET Web API。ASP.N

34、ET Web API 是一種框架,用于輕松構(gòu)建可以訪問多種客戶端(包括瀏覽器和移動設(shè)備)的 HTTP 服務(wù)。 ASP.NET Web API 是一種用于在 .NET Framework 上構(gòu)建 RESTful 應(yīng)用程序的理想平臺。這套Web API基于ASP.NET,又借用了很多ASP.NET MVC的概念,很容易被ASP.NET的開發(fā)者適應(yīng)和熟悉。ASP.NET Web API 一開始就是圍繞HTTP協(xié)議及其消息語義構(gòu)建起來的。與WCF REST相比,它不是對現(xiàn)有框架的增強(qiáng),而是一個全新的平臺。2022/9/1436Asp.Net WebAPI與WCF的關(guān)系WCF最初為基于SOAP的服務(wù)而設(shè)

35、計,后來自 3.5之后才添加了迎合REST的功能,雖然WCF也支持REST了,但實現(xiàn)起來比較麻煩,但是這種在重量級通信平臺上實現(xiàn)的輕量級 消息通信給我們一種牛刀殺雞之感。后來微軟新開發(fā)了WebAPI,一開始是歸在WCF框架旗下的,名為WCF Web API,后來微軟停止開發(fā)WCF Web API,取代它的是ASP.NET Web API,到ASP.NET MVC 4推出時就劃歸Asp.Net旗下了。Announcement: WCF Web API is now ASP.NET Web API! ASP.NET Web API released with ASP.NET MVC 4 Beta.

36、2022/9/1437WCF,ASP.NET Web API 技術(shù)選型如果想讓服務(wù)支持特殊場景,如單向消息傳遞、消息隊列、雙向通信等等,最好選擇WCF。如果想讓服務(wù)優(yōu)先使用快速傳輸通道,如TCP、Named Pipes,甚至UDP(在WCF 4.5中),然后在所有其他傳輸都不可用的時候支持HTTP,那么最好選擇WCF,并且把SOAP和WebHttp兩種綁定都用上。如果服務(wù)是建立在HTTP之上的面向資源的服務(wù),需要發(fā)揮HTTP的全部功能,如傳送圖像、文檔、HTML頁面等多種類型的內(nèi)容,在響應(yīng)中用URI去實現(xiàn)某個任務(wù),那么新的Web API是最好的選擇。如果服務(wù)是多目標(biāo)環(huán)境的,既可作為面向資源的服

37、務(wù)走HTTP通道,又可作為RPC風(fēng)格的SOAP服務(wù)走TCP通道那就再議吧!2022/9/1438Asp.Net WebAPI和Asp.Net MVC關(guān)系1.新的Asp.Net WebAPI項目和典型的MVC項目一樣,包含主要的Models、Controllers 、 Views等文件夾和Global.asax文件。2.Models中的Model主要用于保存Service和Client交互的對象,這些對象默認(rèn)情況下會被轉(zhuǎn)換為Json格式的數(shù)據(jù)迚行傳輸。3.Controllers中的Controller是最重要的,它用于提供數(shù)據(jù)服務(wù)。 4.Views對于WebAPI來說沒有太大的用途。因為Asp.

38、Net WebAPI適用于那些需要使用數(shù)據(jù)服務(wù),而非HTML標(biāo)簽的場景。5.和普通的MVC一樣,Global.asax用于配置路由規(guī)則。6.App_Start目錄,用來聲明路由規(guī)則。2022/9/1439Asp.Net 4.5 Web API介紹Asp.Net 4.5 Web API基于REST風(fēng)格,搭建在HTTP協(xié)議之上的,本質(zhì)上是一種HTTP服務(wù)前身為WCF WEB API,現(xiàn)在集成進(jìn)ASP.NET, 正式更名為ASP.NET WEB API直接借鑒了ASP.NET MVC的設(shè)計,所以兩者有非常類似的編程模式調(diào)用方式:因為Web API完全是基于Web的,所以針對它的調(diào)用本質(zhì)上就是一個簡單

39、的HTTP請求和響應(yīng)過程. 例如: 前端程序利用jQuery以Ajax的方式調(diào)用Web API.2022/9/1440Asp.Net WebAPI使用步驟-創(chuàng)建工程2022/9/1441Asp.Net WebAPI使用步驟-創(chuàng)建工程2022/9/1442Asp.Net WebAPI使用步驟-創(chuàng)建工程2022/9/1443Asp.Net WebAPI和MVC路由的區(qū)別MVC的路由規(guī)則:WebAPI的路由規(guī)則:WebAPI的路由比MVC少了一層Action,為什么?因為Action 的選擇 是根據(jù) HTTP 方法 (GET,PUT, POST, DELETE)完成的。2022/9/1444Asp.

40、Net WebAPI使用步驟-詳細(xì)步驟只要新增一個Controller,繼承ApiController基類,就是WebAPI了。和普通MVC的Controller返回View不同,WebAPI直接返回”數(shù)據(jù)”,因為它的定位就是一個簡單的數(shù)據(jù)服務(wù),至于展現(xiàn),全都丟給前端來完成。在前端Htm中,只要使用JS框架提交數(shù)據(jù)給WebAPI,并解析WebAPI返回的數(shù)據(jù)即可。整個應(yīng)用=前端的 HTML/JavaScripts+后端的 WebAPI 2022/9/1445Asp.Net WebAPI使用步驟-Controler2022/9/1446如何調(diào)用WebAPI?因為 Web API 完全是基于 We

41、b 的,所以針對它的調(diào)用本質(zhì)上就是一個簡單的 HTTP 請 和響應(yīng)過程,可以通過手工地發(fā)送請求接收響應(yīng)的方式來進(jìn)行 WebAPI 的調(diào)用,也可以通 過 Ajax 的方式調(diào)用 WebAPI。在WinForm程序中可以采用發(fā)送HttpClient或HttpWebRequest請求接收響應(yīng)的方式來進(jìn)行對WebAPI 的調(diào)用。在Web應(yīng)用中可以采用基于 jQuery 的 Ajax 調(diào)用,直接通過 Ajax 與 Web API 進(jìn)行交互。2022/9/1447Asp.Net WebAPI使用步驟-寫代碼using System;using System.Collections.Generic;using

42、 System.Linq;using System.Web;using System.Data;using System.Net;using System.Net.Http;using System.Web.Http;using Newtonsoft.Json;using System.Xml;using System.Xml.Linq;using System.Text;namespace BOC.LzdService.Controllers public class LzdServiceController : ApiController public LzdServerAddress G

43、et() LzdServerAddress returnObject = new LzdServerAddress(); returnObject.address1 = ; returnObject.address2 = ; return returnObject; 2022/9/1448WebAPI 的Http請求GET 9:88/api/LzdService HTTP/1.1Accept: text/html, application/xhtml+xml, */*Accept-Language: zh-Hans-CN,zh-Hans;q=0.5User-Agent: Mozilla/5.0

44、 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like GeckoAccept-Encoding: gzip, deflateHost: 9:88DNT: 1Connection: Keep-Alive2022/9/1449WebAPI 的Http響應(yīng)HTTP/1.1 200 OKCache-Control: no-cachePragma: no-cacheContent-Type: application/json; charset=utf-8Expires: -1Server: Microsoft-IIS/8.5X-AspNet-Versio

45、n: 4.0.30319X-Powered-By: ASP.NETDate: Mon, 08 Dec 2014 08:35:11 GMTContent-Length: 64“address1:,“address2:2022/9/1450Asp.Net WebAPI數(shù)據(jù)分頁與查詢2022/9/1451WebAPI何時返回JSON或XML?為什么用Chrome和IE,訪問同樣的服務(wù),Chrome默認(rèn)返回的數(shù)據(jù)是XML格式,而IE默認(rèn)的是JSON格式?實際上 ASP.NET Web API 對數(shù)據(jù)對象的序列化是非常智能的,它能夠根據(jù)請求希望的媒體類型選擇適合的序列化方式。完全看請求的Header中的

46、Accept怎么寫,如果包含了application/xml, WebAPI就返回XML格式的數(shù)據(jù),如果不包含,或者添上application/json,就返回JSON格式的數(shù)據(jù)。2022/9/1452Action是怎樣被找到的?ASP.NET Web API針對當(dāng)前請求選擇Action的機(jī)制不僅僅依賴于 URL 路由,還與請求采用的 HTTP 方法(GET, POST等)有關(guān)。為了找到Action,Web API會查找HTTP方法,然后尋找一個名稱以HTTP方法名開頭的方法。例如,對于一個Get請求,Web API會查找一個以“Get”開頭的動作,如GetContact() 等,參數(shù)完全一致

47、的方法只能有一個。2022/9/1453Asp.Net WebAPI的部署方式ASP.NET Web API 可以寄宿于一個 ASP.NET Web 應(yīng)用中。ASP.NET Web API也可以采用自我寄宿的方式承載于一個其他類型的應(yīng)用程序。Web API 的自我寄宿通過 HttpSelfHostServer 來實現(xiàn),其本質(zhì)就是利用 HttpBinding 創(chuàng)建一個請求監(jiān)聽器和一個接收并處理請求的信道。2022/9/1454Asp.Net Web API 很象Asp.Net MVCAsp.Net Web API基于ASP.NET,又借用了很多ASP.NET MVC的概念,所以很容易被ASP.N

48、ET的開發(fā)者適應(yīng)和熟悉。因為它ASP.net MVC太像了:URL路由,HTTP Method特性,模型綁定等等。只是WebAPI比MVC更加輕量級,更加restful。Asp.Net Web API 主要的技術(shù)指標(biāo)如下:1. 支持URL路由,透過用戶熟悉的MVC風(fēng)格路由語義,生成干凈的URL。2. 根據(jù)Accept標(biāo)頭對請求和響應(yīng)的序列化形式。3. 支持大量輸出格式,包括JSON、XML等。4. 默認(rèn)對REST語義有完善支持,同時又不強(qiáng)制限定必須使用REST語義。5. 基于慣例的設(shè)計引導(dǎo)用戶按HTTP Services的正確方式行事。6. 用于非Web程序時,可以脫離IIS運行(Self-h

49、ostable)。7. 具備可測試性,測試機(jī)制的設(shè)計類似于MVC。2022/9/1455Asp.Net MVC和Asp.Net WebForm關(guān)系A(chǔ)SP.NET Web Forms 為了讓開發(fā)者采用相同的編程模式進(jìn)行 GUI 桌面應(yīng)用和 Web 應(yīng)用的開發(fā),微軟通過 ViewState 和 Postback 對 HTTP 請求和回復(fù)機(jī)制進(jìn)行了封裝,使我們能夠像編寫 Windows Forms 應(yīng)用一樣采用事件驅(qū)動的方式進(jìn)行 ASP.NET Web Forms 應(yīng)用的編程。它借鑒了 Windows Forms 基于控件和事件注冊的編程模式,使 Web 應(yīng)用的開發(fā)變得簡單而快捷,但是它卻使開發(fā)人員

50、與 Web 的本質(zhì)漸行漸遠(yuǎn)。ASP.NET MVC 是一個建立在 ASP.NET 平臺上基于 MVC 模式的 Web 開發(fā)框架,它提供了一種與傳統(tǒng) Web Forms 完全不同的 Web 應(yīng)用開發(fā)方式。ASP.NET MVC 是一種回歸,它使開發(fā)人員可以真正地面向 Web 進(jìn)行編程,我們面對的不再是拖拉到 Web 頁面的控件,而是整個 HTTP 請求和響應(yīng)的流程。2022/9/1456Asp.Net MVC介紹ASP.NET MVC 是微軟開發(fā)的以MVC模式為基礎(chǔ)的ASP.NET Web應(yīng)用程序框架。MVC 是一種設(shè)計模式,它將一個人機(jī)交互應(yīng)用涉及的功能分為 Model、Controller

51、和 View 三部分,它們各自具有相應(yīng)的職責(zé), 體現(xiàn)了關(guān)注點分離這一原則: 1.Model(模型)是應(yīng)用程序中用于處理應(yīng)用程序數(shù)據(jù)邏輯的部分。通常模型對象 負(fù)責(zé)在數(shù)據(jù)庫中存取數(shù)據(jù)。 2.View(視圖)是應(yīng)用程序中處理數(shù)據(jù)顯示的部分。通常視圖是依模型數(shù)據(jù)創(chuàng)建的。 3.Controller(控制器)是應(yīng)用程序中處理用戶交互的部分。通??刂破髫?fù)責(zé)從視圖 讀取數(shù)據(jù),控制用戶輸入,并向模型發(fā)送數(shù)據(jù)。Asp.Net MVC優(yōu)點: 1.通過把項目分成Model、View和Controller,使得復(fù)雜項目更加容易維護(hù),減少 項目之間的耦合。 2.沒有使用ViewState和服務(wù)器表單控件,可以更方便的控制

52、應(yīng)用程序的行為,不再 是拖拉到 Web 頁面的控件,而是真正回歸HTTP 請求和響應(yīng)的流程。 3.應(yīng)用程序通過Controller來控制程序請求,并提供了原生的路由功能來重寫Url。 4.使Web程序?qū)卧獪y試的支持更加出色。 5.在團(tuán)隊開發(fā)模式下表現(xiàn)更出眾。2022/9/1457工作過程比較ASP.NET WebForm 工作過程。Asp.Net MVC 工作過程。2022/9/1458Asp.Net MVC是如何建立起來的?ASP.NET 由于采用了管道式設(shè)計,具有很好的擴(kuò)展性,而整個 ASP.NET MVC 應(yīng)用框架 就是通過擴(kuò)展 ASP.NET 實現(xiàn)的。ASP.NET 的擴(kuò)展點主要體現(xiàn)

53、在 HttpModule 和 HttpHandler 這兩個核心組件之上。實際上整個 ASP.NET MVC 框架就是通過自定義的ASP.NET 組件HttpModule 和 HttpHandler 建立起來的。HttpModule 和 HttpHandler 是 ASP.NET 管道的兩個重要的紐件。請求的最終處理通過 Handler 來完成,ASP.NET MVC 就是通過一個名為 MvcHandler 的自定義 HttpHandler 實現(xiàn)了對 Controller 的激活和 Action 的執(zhí)行。2022/9/1459IIS對ASP.NET對請求處理的過程下面左右兩張圖分別是是IIS5

54、和IIS6(或IIS7的經(jīng)典模式)對Asp.Net的Http請求處理示意圖,可以看到,IIS6增加了應(yīng)用程序池和HTTP.SYS模塊,但是最終針對*.aspx頁面的請求都會進(jìn)入HttpRuntime運行時當(dāng)中。2022/9/1460Http請求在HttpRuntime中的處理當(dāng)Http請求進(jìn)入 Asp.Net Runtime以后,它的處理管道由Modules和Handlers組成:1. HttpRuntime將Http請求轉(zhuǎn)交給 HttpApplication,HttpApplication代表著程序員創(chuàng)建的Web應(yīng)用程序。HttpApplication創(chuàng)建針對此Http請求的 HttpCon

55、text對象,這些對象包含了關(guān)于此請求的其他對象。2. 接下來Http請求通過一系列Module,這些Module對Http請求具有完全的控制權(quán)。這些Module可以做一些執(zhí)行某個實際工作前的事情。3. Http請求經(jīng)過所有的Module之后,它會被HttpHandler處理。在這一步,執(zhí)行實際的一些操作,通常也就是.aspx頁面所完成的業(yè)務(wù)邏輯。4.HttpHandler處理完以后,Http請求再一次回到Module,此時Module可以做一些某個工作已經(jīng)完成了之后的事情。2022/9/1461HttpModule和HttpHandler介紹HttpModule:它負(fù)責(zé)監(jiān)聽HttpReque

56、st,同時對HttpRequest增添或者過濾掉一部分內(nèi)容。也就是說,當(dāng)一個HTTP請求到達(dá)HttpModule時,整個ASP.NET Framework系統(tǒng)還并沒有對這個HTTP請求做任何處理,也就是說此時對于HTTP請求來講,HttpModule是一個HTTP請求的“必經(jīng)之路”,所以可以在這個HTTP請求傳遞到真正的請求處理中心(HttpHandler)之前附加一些需要的信息在這個HTTP請求信息之上,或者針對截獲的這個HTTP請求信息作一些額外的工作,或者在某些情況下干脆終止?jié)M足一些條件的HTTP請求,從而可以起到一個Filter過濾器的作用。HttpHandler:它是一個HTTP請求

57、的真正處理中心,也正是在這個HttpHandler容器中,ASP.NET Framework才真正地對客戶端請求的服務(wù)器頁面做出編譯和執(zhí)行,并將處理過后的信息附加在HTTP請求信息流中再次返回到HttpModule中。總結(jié),ASP.NET把Http請求依次傳遞給管道中各個HttpModule,最終被HttpHandler處理,處理完成后,再次經(jīng)過管道中的HTTP模塊,把結(jié)果返回給客戶端。我們可以在每個HttpModule中都可以干預(yù)請求的處理過程。因此,在一個Http請求的處理過程中,只能調(diào)用一個HttpHandler,但可以調(diào)用多個HttpModule。 2022/9/1462選擇HttpH

58、andler還是HttpModule?HttpHandler與HttpModule不同,一旦定義了自己的HttpHandler類,那么它對系統(tǒng)的HttpHandler的關(guān)系將是“覆蓋”關(guān)系。識別該用哪一個的方法: 1. 如果要響應(yīng)一類請求,那么就選擇HttpHandler。 2. 如果要修改或者檢查所有請求(總之就是不生成響應(yīng)結(jié)果),那就選擇HttpModule。2022/9/1463Asp.Net路由系統(tǒng)介紹Asp.Net URL 路由系統(tǒng)并不是專屬于 ASP.NETMVC 的,而是直接建立在 ASP.NET 上,因此ASP.NET Web Forms也可以用它。整個 URL 路由系統(tǒng),是通

59、過一個名為 UrIRoutingModule 的自定義 HttpModule 實現(xiàn)的。Asp.Net URL 路由系統(tǒng)的主要用途有兩個:1. 解析用戶輸入的URL,調(diào)用Controler的Action方法來執(zhí)行具體的功能。2. 把Controler的Action輸出成URL。具體效果:它實現(xiàn)了請求地址與物理文件的分離,對于原來的 Asp, ASP.NET Web Forms 應(yīng)用來說,每一個有效的請求都對應(yīng)著一個具體的物理地址,但是這種將 URL 與物理文件緊密綁定在一起的方式并不是一種好的解決方案。當(dāng)網(wǎng)站能夠正常高效的運行之后,也就是在解決了有無的問題之后,我們還要讓網(wǎng)站更好。 劣 /pro

60、ducts/list.aspx?category=food 優(yōu) /products/list/food 劣 /show.aspx?year=2010&month=08&day=23 優(yōu) /show/2010/08/232022/9/1464請求 URL 與物理文件的分離對于一個 ASP.NET Web Forms 應(yīng)用來說,每一個有效的請求都對應(yīng)著一個具體的物理文件。它有兩大局限性: 可讀性不強(qiáng): 在很多情況下, URL也不僅僅具各基本的可用性(能夠訪問正確的網(wǎng)絡(luò)資源), 還需要具有很好的可讀性。好的 URL 設(shè)計應(yīng)該讓我們一眼就能看出針對它訪問的目 標(biāo)資源是什么。請求地址與物理文件緊密綁定會

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論