亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

使用ASP.NET Web Api構建基于REST風格的服務實戰系列教程【三】——Web Api入門

2019-11-15 02:25:51
字體:
來源:轉載
供稿:網友

使用asp.net Web Api構建基于REST風格的服務實戰系列教程【三】——Web Api入門

系列導航地址http://www.49028c.com/fzrain/p/3490137.html

前言

經過前2節的介紹,我們已經把數據訪問層搭建好了,從本章開始就是Web Api部分了。在正式開始之前,再一次回顧一下Web Api的應用場景:Web Api可以與 MVC,WebForm結合使用,也可以作為一個單獨的Web服務。在正式討論Web Api的配置以及如何構造我們的URI來消費資源之前,我們必須理解Http方法與我們將要訪問的資源之間的關系。舉個簡單的例子,我們把模型”Course”作為我們訪問的資源,下面就列舉了訪問這個資源的http方法:

ActionHTTP VerbRelative URI
獲取所有課程信息GET/api/courses
根據某個Id獲取單個課程GET/api/courses/id
新增一個課程POST/api/coursesNew course is sent in POST body
更新一個課程PUT or PATCH/api/courses/idUpdated course is sent in POST body
刪除一個課程DELETE/api/courses/id

第一步:創建Web Api項目

右擊解決方案->添加新建項目

image

下一步:

image

點擊確定

第二步:配置第一個路由

在創建好項目之后,我們可以在App_Start文件夾下看到“WebApiConfig”類。這個類就是用來配置路由信息的,這個類最終會在“Global.asax”的application_Start()方法中被調用,后面我們會在這個這個類里面配置多條路由信息。

配置第一個路由:

config.Routes.MapHttPRoute(                name: "Courses",                routeTemplate: "api/courses/{id}",                defaults: new {controller="courses", id = RouteParameter.Optional }            );

分析一下上面這段代碼:我們創建了一個Courses的路由規則,這個路由模板會匹配到“api/courses/{id}”的URI,在這個模板定義了2個默認值(api,courses)以及一個可選值(id)。對于“/api/courses or /api/courses/5”URI就會被我們的路由模板匹配到,同時“/api/courses”URI也會被匹配到,因為Id是可選的。

第三步:添加第一個控制器(courses controller)

Web Api中的Controller是用來處理客戶端Http請求的(與MVC中的Controller類似),首先,創建Controller——右擊Controller文件夾->新建項->控制器

然后出現下面窗口:

image

選擇Web API 2控制器-空,并命名為CoursesController。然后確定

打開剛才創建的Controller,可以看到我們創建的類繼承自“ApiController”。同時對于這個類的類名必須是“CoursesController”,因為在Web Api中默認的控制器選擇方式是尋找所有繼承自“ApiController”類并且這個類是以“Courses”開頭(這是在我們的路由規則中配置的)的控制器。

第四步:在Controller中添加Action

首先,我們創建上述表格列舉到的前2個方法(GetAllCourses,GetCourseById)

方法的選擇是智能的,如果我們創建了2個方法Get()和GetCourse(int id),假設我們發送一個GET請求并且URI是“/api/courses/5”,那么“GetCourse(int id)”方法就會被選擇執行,這是因為方法是以Get開頭而且URI中包含Id的值。這種選擇方式同樣適用以其他的Http方法(put,delete,post),下面上代碼:

public class CoursesController : ApiController    {        public List<Course> Get()        {            ILearningRepository repository = new LearningRepository(new LearningContext());             return repository.GetAllCourses().ToList();        }         public Course GetCourse(int id)        {            ILearningRepository repository = new LearningRepository(new LearningContext());             return repository.GetCourse(id);        }     }

當我們創建一個Get請求并且URI是“http://localhost:{your_port}/api/courses”時候,Get()方法會被選擇調用,下面是相應的部分代碼:

[    {        "Id": 1,        "Name": "History Teaching Methods 1",        "Duration": 3,        "DescrOutlook.com",            "UserName": "AhmadJoudeh",            "PassWord": "SWDQNPSE",            "FirstName": "Ahmad",            "LastName": "Joudeh",            "Gender": 0        },        "CourseSubject": {            "Courses": [],            "Id": 1,            "Name": "History"        },        "Enrollments": []    },    {        "Id": 2,        "Name": "History Teaching Methods 2",        "Duration": 3,        "Description": "The course will talk in depth about: History Teaching Methods 2",        "CourseTutor": {            "Courses": [],            "Id": 1,            "Email": "Ahmad.Joudeh@outlook.com",            "UserName": "AhmadJoudeh",            "Password": "SWDQNPSE",            "FirstName": "Ahmad",            "LastName": "Joudeh",            "Gender": 0        },        "CourseSubject": {            "Courses": [],            "Id": 1,            "Name": "History"        },        "Enrollments": []    },

如果你發送一個Get請求并且URI是“http://localhost:{your_port}/api/courses/5”。那么GetCourse(int id)將會被選擇調用執行。但是很遺憾在調用這個方法之后就會產生一個異常,這個異常信息簡單來說就是“序列化對象的時候出現了循環依賴”,換句話說就是對象間循環引用(Course>Enrollment>Course>Enrollment>etc…)

總結

到目前為止我們已經讓Web Api跑起來了,但仍然有很多不足之處:

返回對象時出現循環依賴,可以通過模型工廠模式解決。

我們返回了領域模型中所有的字段給客戶端,然而有一些敏感信息不應該返回(例如:password字段),解決方案:模型工廠模式

每一個返回給客戶端的資源都應該包含一個URI以便客戶端查詢,解決方案依舊是模型工廠模式。

對于返回單個資源,我們應當返回相應的狀態碼(例如:成功200,資源未找到404等),解決方案:HttpResponseMessage對象

在每個方法里我們都實例化了一個repository,這個對象包含了一些昂貴的操作(例如:數據庫連接),解決方案:依賴注入模式

對于返回的Json對象格式是以“帕斯卡”風格的(例如“FirstName”),然而我們的Api有很大的可能被帶有javascript的客戶端消費,對于JS開發者來說可能更適合“駝峰”風格(例如”firstName”)的數據。解決方案:配置Json格式。

ok,下一章我們就著重解決上述的問題

本章代碼:http://yun.baidu.com/share/link?shareid=2010367762&uk=17559114&third=0


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产在线观看精品一区二区三区| 亚洲精品有码在线| 97精品伊人久久久大香线蕉| 欧美色道久久88综合亚洲精品| 久久久亚洲欧洲日产国码aⅴ| 欧美巨乳美女视频| 欧美日韩精品中文字幕| 欧美大学生性色视频| 国产97人人超碰caoprom| 黑人巨大精品欧美一区二区一视频| 青青久久av北条麻妃黑人| 最近的2019中文字幕免费一页| 亚洲理论在线a中文字幕| 久久亚洲精品毛片| 亚洲人成网站999久久久综合| 日本午夜精品理论片a级appf发布| 日韩av有码在线| 成人av.网址在线网站| 2019av中文字幕| 久久97精品久久久久久久不卡| 国产激情久久久| 97视频com| 91国内产香蕉| 久久99久久99精品中文字幕| 久久露脸国产精品| 国产精品女人网站| 欧美成人午夜视频| 午夜精品一区二区三区av| 亚洲免费视频一区二区| 国产丝袜一区二区三区免费视频| 欧日韩不卡在线视频| 国内精品久久久久影院 日本资源| 中国人与牲禽动交精品| 欧美日韩xxxxx| 中文字幕av一区二区三区谷原希美| 日本久久久久久久| 亚洲国产精彩中文乱码av在线播放| 国产一区视频在线播放| 欧美精品videosex极品1| 91老司机在线| 亚洲女人天堂网| 亚洲乱码av中文一区二区| 国产精品av电影| 日韩国产欧美精品一区二区三区| 久久精品色欧美aⅴ一区二区| 亚洲男人的天堂网站| 日韩美女av在线免费观看| 亚洲欧美日本精品| 亚洲视频日韩精品| 一本一道久久a久久精品逆3p| 午夜欧美大片免费观看| 国产精品91一区| 国产精品爱啪在线线免费观看| 国产精品高潮呻吟久久av野狼| 久久久精品欧美| 国产啪精品视频| 尤物yw午夜国产精品视频明星| 色综合五月天导航| 亚洲r级在线观看| 久久久视频精品| 亚洲精品视频免费在线观看| 中文字幕在线看视频国产欧美在线看完整| 欧洲s码亚洲m码精品一区| 国产精品久久久av| 亚洲精品中文字幕有码专区| 久久久999国产精品| 久久成人国产精品| 久久久精品久久久| 国产欧洲精品视频| 亚洲激情视频网站| 国产精品久久99久久| 亚洲国产高潮在线观看| 日本精品久久久久久久| 成人中文字幕在线观看| 亚洲一区二区三区香蕉| 日韩欧美亚洲一二三区| 欧美性猛交xxxx| 韩剧1988在线观看免费完整版| 色妞欧美日韩在线| 91精品国产色综合久久不卡98口| 亚洲美女在线视频| 日韩国产高清污视频在线观看| 伊人久久综合97精品| 久久国产一区二区三区| 国产欧亚日韩视频| 永久免费精品影视网站| 欧美精品久久久久久久久| 国产精品高潮视频| 91日韩在线视频| 97久久精品人人澡人人爽缅北| 日产精品99久久久久久| 成人黄色网免费| 欧美视频专区一二在线观看| 久久天天躁狠狠躁老女人| 亚洲视频国产视频| 亚洲激情电影中文字幕| 欧洲日本亚洲国产区| 亚洲国产小视频在线观看| 国产精品香蕉在线观看| 911国产网站尤物在线观看| 欧美性极品xxxx做受| 精品性高朝久久久久久久| 欧美精品第一页在线播放| 狠狠久久亚洲欧美专区| 亚洲欧美在线磁力| 2020久久国产精品| 国产精品a久久久久久| 亚洲欧洲在线播放| 日本一区二三区好的精华液| 国产日韩欧美电影在线观看| 日韩激情av在线播放| 亚洲最大福利网站| yellow中文字幕久久| 午夜精品久久久久久久男人的天堂| 欧美日本亚洲视频| 日韩免费在线观看视频| 夜色77av精品影院| 在线观看欧美视频| 国产精品视频自拍| 亚洲精品久久7777777| 久久影视电视剧免费网站清宫辞电视| 亚洲香蕉成视频在线观看| 久久久久日韩精品久久久男男| 97在线免费观看| 久久精品91久久香蕉加勒比| 国产精品视频999| 日韩成人xxxx| yellow中文字幕久久| 亚洲欧美日韩国产中文专区| 国产欧美日韩中文字幕在线| 欧美在线一区二区视频| 亚洲第一视频在线观看| 欧美午夜精品久久久久久人妖| 日本精品视频在线| 日韩欧美成人精品| 亚洲第五色综合网| 亚洲色图狂野欧美| 91深夜福利视频| 欧美激情一区二区三区成人| 国产精品夜色7777狼人| 欧美一级在线亚洲天堂| 一区二区三区在线播放欧美| 日韩欧美亚洲国产一区| 国产日韩欧美91| 亚洲精品久久久久久下一站| 91国语精品自产拍在线观看性色| 日韩有码视频在线| 日韩电视剧免费观看网站| 亚洲人a成www在线影院| 日韩欧美在线视频日韩欧美在线视频| 国产在线一区二区三区| 国产欧美久久一区二区| 欧美成人四级hd版| 国产精品欧美在线| 久久久久久久久久国产| 日韩国产高清污视频在线观看| 欧洲s码亚洲m码精品一区| 亚洲欧美日韩一区二区三区在线| 国产精品情侣自拍| 亚洲视频精品在线| 日韩精品免费在线视频| 97视频在线观看视频免费视频| 欧美一级淫片aaaaaaa视频| 国产精品女人久久久久久|