ASP.NET Web API 入門實(shí)戰(zhàn)(1)--開篇

最近對之前設(shè)備監(jiān)控項(xiàng)目中所用的ASP.NET Web API技術(shù)做了一個小小的總結(jié)倔约,寫了一個簡單的demo,以供師弟師妹們參考坝初。這個系列可以作為ASP.NET Web API的入門實(shí)戰(zhàn)浸剩,demo比較簡單钾军,但是我認(rèn)為對于構(gòu)建基于ASP.NET Web API的REST風(fēng)格的服務(wù)提供了一個整體的思路,對于入門會有一定的幫助吧绢要。

前言

什么是Web API

Web API是一個比較寬泛的概念吏恭,這里我們提到Web API特指ASP.NET Web API。

官方定義如下重罪,強(qiáng)調(diào)兩個關(guān)鍵點(diǎn)樱哼,即可以對接各種客戶端(瀏覽器,移動設(shè)備)剿配,構(gòu)建http服務(wù)的框架搅幅。Web API利用Http協(xié)議的各個方面來表達(dá)服務(wù)(例如 URI/request response header/caching/versioning/content format),因此就省掉很多配置呼胚。

利用ASP.NET Web API我們可以很輕松的構(gòu)建REST風(fēng)格的服務(wù)茄唐。

Web API在ASP.NET完整框架中地位如下圖:

Web API功能簡介

  1. 支持基于Http verb (GET, POST, PUT, DELETE)的CRUD (create, retrieve, update, delete)操作,通過不同的http動作表達(dá)不同的含義砸讳,這樣就不需要暴露多個API來支持這些基本操作琢融。

  2. 請求的回復(fù)通過Http Status Code表達(dá)不同含義,并且客戶端可以通過Accept header來與服務(wù)器協(xié)商格式簿寂,例如你希望服務(wù)器返回JSON格式還是XML格式漾抬。

  3. 請求的回復(fù)格式支持 JSON,XML常遂,并且可以擴(kuò)展添加其他格式纳令。

  4. 原生支持OData。

  5. 支持Self-host或者IIS host克胳。

  6. 支持大多數(shù)MVC功能平绩,例如Routing/Controller/Action Result/Filter/Model Builder/IOC Container/Dependency Injection。

REST風(fēng)格服務(wù)簡介

REST表示表述性狀態(tài)轉(zhuǎn)移漠另,它代表的是運(yùn)行在HTTP上的一個簡單的無狀態(tài)的架構(gòu)捏雌,每一個唯一URL代表一個資源。在創(chuàng)建RESTful服務(wù)時(shí)笆搓,應(yīng)遵循四個基本的設(shè)計(jì)原則:

  1. 使用HTTP方法(動詞)性湿,使用統(tǒng)一的方式來獲取資源(交互的統(tǒng)一接口),即檢索資源使用GET满败,創(chuàng)建資源使用POST肤频, 更新資源使用PUT / PATCH,刪除資源使用DELETE算墨。

  2. 與資源的交互是無狀態(tài)的宵荒, 因此由客戶端發(fā)起的每個請求應(yīng)當(dāng)包括HTTP請求的所有參數(shù),上下文信息和所需服務(wù)器返回?cái)?shù)據(jù)數(shù)據(jù)類型等。

  3. 資源標(biāo)識應(yīng)通過URI來定義报咳,簡單來說應(yīng)該是只使用URI來完成服務(wù)器與客戶端和資源之間的交互侠讯。這些URI可以看作一個RESTful服務(wù)提供的接口。

  4. 支持JSON或/和XML等多種格式作為數(shù)據(jù)傳輸格式少孝。

開發(fā)環(huán)境

筆者所用的開發(fā)環(huán)境如下:

  1. 操作系統(tǒng):Windows 10 继低,64位
  2. IDE:Visual Studio 2013
  3. 數(shù)據(jù)庫:SqlServer 2012

各位小伙伴可以根據(jù)自己的需求選用不同的IDE和數(shù)據(jù)庫,IDE強(qiáng)烈推薦VS2013以上的版本稍走,以免掉坑。

涉及技術(shù)

在我們的實(shí)例中用到了:

  1. SQL Server數(shù)據(jù)庫保存數(shù)據(jù)
  2. Web API提供REST風(fēng)格的服務(wù)
  3. ORM映射采用的是Entity Framework的Code First開發(fā)方式
  4. Vue.js解析Wen API返回的數(shù)據(jù)柴底,對數(shù)據(jù)的雙向綁定也會做一個簡單的介紹

創(chuàng)建Web API項(xiàng)目

打開VS婿脸,新建項(xiàng)目,創(chuàng)建ASP.NET Web 應(yīng)用程序柄驻,創(chuàng)建相應(yīng)的解決方案狐树,如下圖:

選擇模板為Web API,我們可以看到MVCWeb API兩項(xiàng)已經(jīng)默認(rèn)打勾鸿脓,


作為簡單的 ASP.NET Web API 入門項(xiàng)目抑钟,我們在這里先不涉及身份認(rèn)證,因此野哭,點(diǎn)擊右側(cè)的“更改身份認(rèn)證”在塔,我們選擇“無身份認(rèn)證”,如下圖所示:

就這樣拨黔,一個Web API項(xiàng)目就創(chuàng)建好了蛔溃,不得不感嘆 VS 是宇宙最強(qiáng)大的 IDE ,微軟出的東西就是簡單易用篱蝇。

看一下代碼結(jié)構(gòu)贺待,是典型的MVC,我們可以看到在Controller文件夾中有兩個自動生成的控制器類零截,供我們參考:

ValuesController.cs中麸塞,ValuesController繼承了ApiController類,提供了GET涧衙、POST哪工、PUT俱恶、DELETE方法涧郊,為了讓示例簡單化翅雏,values值被存儲在控制器類中的固定數(shù)組中唯蝶。當(dāng)然捶箱,在實(shí)際應(yīng)用程序中缔逛,你可能想要查詢數(shù)據(jù)庫或使用其他外部數(shù)據(jù)源页响,我們將會在下面的部分進(jìn)行介紹闺魏。代碼如下:

public class ValuesController : ApiController
    {
        // GET api/values
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET api/values/5
        public string Get(int id)
        {
            return "value";
        }

        // POST api/values
        public void Post([FromBody]string value)
        {
        }

        // PUT api/values/5
        public void Put(int id, [FromBody]string value)
        {
        }

        // DELETE api/values/5
        public void Delete(int id)
        {
        }
    }

控制器定義了兩個返回value值的方法:

  1. IEnumerable<string> Get()方法將整個列表作為IEnumerable類型返回。
  2. Get(int id)方法通過它的ID來查找單個value值鸭限。

沒錯蜕径,你已經(jīng)有一個可以使用的web API了“芫控制器上的每個方法都對應(yīng)一個或多個URI兜喻,我們先嘗試調(diào)用一下Web API,點(diǎn)擊啟動調(diào)試赡麦,可以看到項(xiàng)目的主頁是基于Boonstrap的朴皆。

調(diào)用Web API,控制器方法和對應(yīng)的URI如下:
Controlle Method為:IEnumerable<string> Get()
URI為: api/values

Controlle Method為:string Get(int id)
URI為: api/values/id

調(diào)用結(jié)果如下圖(所用瀏覽器為Chrome泛粹,使用IE核瀏覽器會提示保存Json文件):
1.調(diào)用api/values

2.調(diào)用api/values/2

上面調(diào)用Web API返回的格式XML格式的遂铡,后邊的部分我會介紹如何強(qiáng)制返回Json格式。

下面將具體介紹如何創(chuàng)建數(shù)據(jù)實(shí)體并運(yùn)用Entity Framework與數(shù)據(jù)庫進(jìn)行交流晶姊。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末扒接,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子们衙,更是在濱河造成了極大的恐慌钾怔,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蒙挑,死亡現(xiàn)場離奇詭異宗侦,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)脆荷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進(jìn)店門凝垛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蜓谋,你說我怎么就攤上這事梦皮。” “怎么了桃焕?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵剑肯,是天一觀的道長。 經(jīng)常有香客問我观堂,道長让网,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任师痕,我火速辦了婚禮溃睹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘胰坟。我一直安慰自己因篇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著竞滓,像睡著了一般咐吼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上商佑,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天锯茄,我揣著相機(jī)與錄音,去河邊找鬼茶没。 笑死肌幽,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的礁叔。 我是一名探鬼主播牍颈,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼琅关!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起讥蔽,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤涣易,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后冶伞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體新症,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年响禽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了徒爹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡芋类,死狀恐怖隆嗅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情侯繁,我是刑警寧澤胖喳,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站贮竟,受9級特大地震影響丽焊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜咕别,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一技健、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧惰拱,春花似錦雌贱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽删掀。三九已至,卻和暖如春导街,著一層夾襖步出監(jiān)牢的瞬間披泪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工搬瑰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留款票,地道東北人。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓泽论,卻偏偏與公主長得像艾少,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子翼悴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 本系列主要翻譯自《ASP.NET MVC Interview Questions and Answers 》- B...
    圣杰閱讀 3,962評論 0 56
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理缚够,服務(wù)發(fā)現(xiàn),斷路器鹦赎,智...
    卡卡羅2017閱讀 134,693評論 18 139
  • 一說到REST谍椅,我想大家的第一反應(yīng)就是“啊,就是那種前后臺通信方式古话〕裕”但是在要求詳細(xì)講述它所提出的各個約束,以及如...
    時(shí)待吾閱讀 3,433評論 0 19
  • 前言HTTP不僅僅服務(wù)于web頁面陪踩,同時(shí)也是構(gòu)建暴露服務(wù)和數(shù)據(jù)的API的強(qiáng)大平臺杖们。HTTP有著簡單、靈活和無處不在...
    極客學(xué)院Wiki閱讀 2,209評論 1 7
  • Phenomenalism By Tsai Cheng-Yuan Come from life, art shap...
    陳子弘閱讀 1,001評論 2 6