日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

[翻译]创建ASP.NET WebApi RESTful 服务(9)

發布時間:2025/3/15 asp.net 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [翻译]创建ASP.NET WebApi RESTful 服务(9) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一旦成功的發布API后,使用者將依賴于你所提供的服務。但是變更總是無法避免的,因此謹慎的制定ASP.NET Web API的版本策略就變得非常重要。一般來說,新的功能需要無縫的接入,有時新老版本需要并行,以便給使用者足夠的時間來進行遷移和配套的變更。設置,老的版本會一直持續被使用。

簡單版本管理

假設我們現在對StudentsController進行修改,將GET方法中返回“FirstName” 和 “LastName”修改為返回“FullName”和 “CoursesDuration”。

最簡單的方法就是新建一個類似于StudentsV2Controller的新服務。請留意V2,接下來將依賴這個引入管理策略。這種方法來自于Shawn Wildermuth的plural sight course文章。舊版本的服務返回的json應該是這樣的:

1: [{ 2: "id": 2, 3: "url": "http://localhost:8323/api/students/HasanAhmad", 4: "firstName": "Hasan", 5: "lastName": "Ahmad", 6: "gender": 0, 7: "enrollmentsCount": 4 8: }, 9: { 10: "id": 3, 11: "url": "http://localhost:8323/api/students/MoatasemAhmad", 12: "firstName": "Moatasem", 13: "lastName": "Ahmad", 14: "gender": 0, 15: "enrollmentsCount": 4 16: }]

而新版本的返回如下:

1: [{ 2: "id": 2, 3: "url": "http://localhost:8323/api/students/HasanAhmad", 4: "fullName": "Hasan Ahmad", 5: "gender": 0, 6: "enrollmentsCount": 4, 7: "coursesDuration": 13 8: }, 9: { 10: "id": 3, 11: "url": "http://localhost:8323/api/students/MoatasemAhmad", 12: "fullName": "Moatasem Ahmad", 13: "gender": 0, 14: "enrollmentsCount": 4, 15: "coursesDuration": 16 16: }]

新版本的GET函數的實現為:

1: public IEnumerable<StudentV2BaseModel> Get(int page = 0, int pageSize = 10) 2: { 3: IQueryable<Student> query; 4: ? 5: query = TheRepository.GetAllStudentsWithEnrollments().OrderBy(c => c.LastName); 6: ? 7: var totalCount = query.Count(); 8: var totalPages = Math.Ceiling((double)totalCount / pageSize); 9: ? 10: var urlHelper = new UrlHelper(Request); 11: var prevLink = page > 0 ? urlHelper.Link("Students", new { page = page - 1, pageSize = pageSize }) : ""; 12: var nextLink = page < totalPages - 1 ? urlHelper.Link("Students", new { page = page + 1, pageSize = pageSize }) : ""; 13: ? 14: var paginationHeader = new 15: { 16: TotalCount = totalCount, 17: TotalPages = totalPages, 18: PrevPageLink = prevLink, 19: NextPageLink = nextLink 20: }; 21: ? 22: System.Web.HttpContext.Current.Response.Headers.Add("X-Pagination", 23: Newtonsoft.Json.JsonConvert.SerializeObject(paginationHeader)); 24: ? 25: var results = query 26: .Skip(pageSize * page) 27: .Take(pageSize) 28: .ToList() 29: .Select(s => TheModelFactory.CreateV2Summary(s)); 30: ? 31: return results; 32: }

StudentV2BaseModel和CreateV2Summary只是為了舉例方便,實際可以根據需要是否要進行這樣的修改或者無須修改。

具體的代碼如下:

1: public class StudentV2BaseModel 2: { 3: public int Id { get; set; } 4: public string Url { get; set; } 5: public string FullName { get; set; } 6: public Data.Enums.Gender Gender { get; set; } 7: public int EnrollmentsCount { get; set; } 8: public double CoursesDuration { get; set; } 9: } 10: ? 11: public class ModelFactory 12: { 13: public StudentV2BaseModel CreateV2Summary(Student student) 14: { 15: return new StudentV2BaseModel() 16: { 17: Url = _UrlHelper.Link("Students", new { userName = student.UserName }), 18: Id = student.Id, 19: FullName = string.Format("{0} {1}", student.FirstName, student.LastName), 20: Gender = student.Gender, 21: EnrollmentsCount = student.Enrollments.Count(), 22: CoursesDuration = Math.Round(student.Enrollments.Sum(c => c.Course.Duration)) 23: }; 24: } 25: }

來源:http://bitoftech.net/2013/12/16/asp-net-web-api-versioning-strategy/

轉載于:https://www.cnblogs.com/tukzer/p/3664153.html

總結

以上是生活随笔為你收集整理的[翻译]创建ASP.NET WebApi RESTful 服务(9)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。