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

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

使用ASP.NET Web Api構建基于REST風格的服務實戰系列教程【六】——實現資源間的關聯

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

使用asp.net Web Api構建基于REST風格的服務實戰系列教程【六】——實現資源間的關聯

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

前言

這一篇文章主要介紹一下資源間的關聯——例如在學生和課程之間就存在這樣的關聯:每一個課程都會有多個學生來選,如何獲取這些有關聯的信息?如何實現選課的業務?對于客戶端應該怎么來調用呢?下面給出解決方案:

配置對應的路由

對于上面的需求,我們可以先定制一個URI模板:”api/courses/courseid/students/{userName}“,如果我們打算查詢所有選了courseId為5的學生,那么客戶端就應該發送Get請求”api/courses/5/students/”.如果我們打算為用戶名為”TaiseerJoudeh“的學生選擇課程CourseId為5的課程,那么就應該發送Post請求”api/courses/5/students/TaiseerJoudeh“。

為了實現上面說的,我們首先要在”WebApiConfig“中添加如下一條路由信息:

config.Routes.MapHttPRoute(    name: "Enrollments",    routeTemplate: "api/courses/{courseId}/students/{userName}",    defaults: new { controller = "Enrollments", userName = RouteParameter.Optional });

可以看到在這里courseId是必選的,而userName是可選的

創建響應的控制器

正如上面路由配置的,我們應該有一個“EnrollmentsController”,在這個控制器中我們應該包含2個方法:Get用來返回對應的學生信息,Post用來實現學生選課,下面上代碼:

public class EnrollmentsController : BaseApiController    {        public EnrollmentsController(ILearningRepository repo)            : base(repo)        {        }        public IEnumerable<StudentBaseModel> Get(int courseId)        {            IQueryable<Student> query;            query = TheRepository.GetEnrolledStudentsInCourse(courseId).OrderBy(s => s.LastName);            var totalCount = query.Count();            System.Web.HttpContext.Current.Response.Headers.Add("X-InlineCount", totalCount.ToString());            var results = query                                               .ToList()                        .Select(s => TheModelFactory.Create(s));            return results;        }        public HttpResponseMessage Post(int courseId, [FromUri]string userName, [FromBody]Enrollment enrollment)        {            try            {                if (!TheRepository.CourseExists(courseId)) return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Could not find Course");                var student = TheRepository.GetStudent(userName);                if (student == null) return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Could not find Student");                var result = TheRepository.EnrollStudentInCourse(student.Id, courseId, enrollment);                if (result == 1)                {                    return Request.CreateResponse(HttpStatusCode.Created);                }                else if (result == 2)                {                    return Request.CreateResponse(HttpStatusCode.NotModified, "Student already enrolled in this course");                }                return Request.CreateResponse(HttpStatusCode.BadRequest);            }            catch (Exception ex)            {                return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex);            }        }    }

在Post方法中我們使用了FormURL和FormBody的特性,這樣就表明我們將從請求的什么地方來獲得參數(從URL中獲取UserName,從Body中獲取enrollment),對于enrollment對象來說只要包含一個日期即可(詳情參看系列數據庫及模型的構建:http://www.49028c.com/fzrain/p/3491804.html),同時我們要發送“courseId”以及“UserName”。

下面測試一下我們的Post方法:我們打算為“TaiseerJoudeh”選擇CourseId為5的課程:

image

在之前已經介紹過,我們使用http狀態碼來響應請求的不同結果(從這次開始看的朋友可以參考:http://www.49028c.com/fzrain/p/3520442.html),請求成功則返回201(Resource Created),如果該選課記錄已存在則返回304(Not modified)

總結

對于資源間的關聯就這么點到為止了,具體的應用在以后慢慢感悟了。對于之前給出的Get方法,有一個明顯的瑕疵:對于大量的數據,服務器會全部返回給客戶端,這是非常不好的,那么下一章我們就來實現分頁。

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕最新精品| 91久久精品日日躁夜夜躁国产| 91chinesevideo永久地址| 国产精品成熟老女人| 欧美国产日韩中文字幕在线| 欧美成人午夜激情| 777精品视频| 91嫩草在线视频| 91精品国产高清自在线看超| 欧美洲成人男女午夜视频| 国产日韩欧美视频| 国产精品69久久久久| 欧美激情视频网| 国产视频在线一区二区| 高清欧美性猛交xxxx黑人猛交| 日韩成人黄色av| 韩国19禁主播vip福利视频| 疯狂做受xxxx高潮欧美日本| 欧美在线视频免费播放| 26uuu另类亚洲欧美日本一| 国产日本欧美一区二区三区| 国产三级精品网站| 欧美精品成人91久久久久久久| 日韩在线观看精品| 91九色蝌蚪国产| 欧美乱妇40p| 91久久精品视频| 98视频在线噜噜噜国产| 久久久久久免费精品| 97成人精品视频在线观看| 夜夜躁日日躁狠狠久久88av| 亚洲精品理论电影| 91在线无精精品一区二区| 欧美黄色成人网| 精品福利视频导航| 亚洲天堂av在线免费观看| 欧美第一黄网免费网站| 亚洲欧美中文字幕| 久久久国产精彩视频美女艺术照福利| 国产剧情日韩欧美| 日韩欧美国产高清91| 国产成人福利视频| 日本不卡免费高清视频| 国产主播欧美精品| 欧美视频在线观看 亚洲欧| 欧美激情免费视频| 久久手机精品视频| 国产精品444| 国产一区二区欧美日韩| 国产一区二区三区在线免费观看| 91av网站在线播放| 亚洲精品久久久久久久久久久久久| 国产精品揄拍500视频| 亚洲女人天堂成人av在线| 欧美日韩成人网| 欧美极品美女电影一区| 国产成人啪精品视频免费网| 日韩综合视频在线观看| 少妇高潮久久77777| 中文字幕一区二区精品| 国产精品69久久| 波霸ol色综合久久| 亚洲国产欧美一区二区三区久久| 精品视频偷偷看在线观看| 国产精品自拍网| 久久久极品av| 欧美电影在线观看高清| 亚洲日本aⅴ片在线观看香蕉| 久久影院免费观看| 成人免费黄色网| 91精品啪在线观看麻豆免费| 亚洲福利在线视频| 日韩在线精品视频| 国产精品va在线播放| 国产精品久久久久久av下载红粉| 成人免费大片黄在线播放| 日本一区二区三区四区视频| 欧美三级欧美成人高清www| 久久久久久999| 久久久久国产精品免费| 日韩国产精品亚洲а∨天堂免| 国产精品视频1区| 中文字幕日韩欧美精品在线观看| 亚洲永久免费观看| 欧美黄色片免费观看| 国产ts人妖一区二区三区| 欧美亚洲日本黄色| 中文字幕日韩视频| 久久免费高清视频| 大量国产精品视频| 日韩av第一页| 78色国产精品| 久久久中精品2020中文| 亚洲欧美激情四射在线日| 九九热这里只有在线精品视| 美女性感视频久久久| 欧美激情欧美激情在线五月| 欧美夫妻性视频| 久久精品青青大伊人av| 亚洲国产中文字幕在线观看| 欧美性受xxxx黑人猛交| www.国产一区| 亚洲成人a级网| 国产日韩av高清| 国产91精品青草社区| 日韩一区二区三区国产| 中文字幕亚洲欧美在线| 国模gogo一区二区大胆私拍| 亚洲精品日韩激情在线电影| 国产精品久久久av| 久久成人国产精品| 91精品国产色综合久久不卡98口| 国产精品久久不能| 亚洲免费视频观看| 成人国产在线视频| 国产在线拍揄自揄视频不卡99| 国产一区二区三区视频| 国产精品视频导航| 91精品国产综合久久香蕉的用户体验| 最新国产精品拍自在线播放| 久久久久久免费精品| 中文字幕日韩欧美在线视频| 777国产偷窥盗摄精品视频| 亚洲精品免费一区二区三区| 欧美午夜精品久久久久久人妖| wwwwwwww亚洲| 91禁国产网站| 国产精品27p| 91九色精品视频| 欧美中文字幕在线播放| 成人免费高清完整版在线观看| 欧美日韩午夜视频在线观看| 亚洲精品一区二区久| 色香阁99久久精品久久久| 欧美国产日韩一区| 91免费视频网站| 国内偷自视频区视频综合| 国产午夜精品免费一区二区三区| 欧美高清理论片| 亚洲国产精彩中文乱码av在线播放| 国产日韩欧美91| 国产精品嫩草影院久久久| 欧美做爰性生交视频| 日韩成人在线视频观看| 成人欧美在线视频| 成人天堂噜噜噜| 亚洲一区美女视频在线观看免费| 7777免费精品视频| 欧美激情视频网站| 成人国内精品久久久久一区| 国产精品高潮视频| 欧美丰满老妇厨房牲生活| 97精品在线视频| 亚洲最大av网| 亚洲片国产一区一级在线观看| 亚洲精品suv精品一区二区| 久久精彩免费视频| 国产精品主播视频| 亚洲视频在线免费观看| 精品久久久久久中文字幕大豆网| 国产成人精品综合久久久| 91精品国产99久久久久久| 久久99精品久久久久久琪琪| 亚洲国产日韩欧美在线动漫|