Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

จะทำการกำหนดเวอร์ชันด้วยประเภทสื่อที่กำหนดเองใน C # ASP.NET WebAPI ได้อย่างไร


ประเภทสื่ออนุญาตให้ API แจ้งลูกค้าถึงวิธีตีความข้อมูลในเพย์โหลด ในโปรโตคอล HTTP ประเภทของสื่อจะถูกระบุด้วยตัวระบุ เช่น ข้อความ/html, แอปพลิเคชัน/json และ แอปพลิเคชัน/xml ซึ่งสอดคล้องกับ HTML, JSON และ XML ตามลำดับ ซึ่งเป็นรูปแบบเว็บที่พบบ่อยที่สุด APIspecificMedia Types อื่นๆ ก็มีเช่นกัน เช่น application/vnd.api+json

ด้านล่างนี้คือเวอร์ชันที่ต้องส่งในประเภทสื่อ

application/vnd.demo.students.v1+json StudentsV1Controllerapplication/vnd.demo.students.v2+json StudentsV2Controller

จะทำการกำหนดเวอร์ชันด้วยประเภทสื่อที่กำหนดเองใน C # ASP.NET WebAPI ได้อย่างไร

การเพิ่ม CustomControllerSelector ของเราเอง จะแก้ไขข้อผิดพลาดข้างต้น

CustomControllerSelector

ตัวอย่าง

การใช้ System.Linq;การใช้ System.Net.Http;การใช้ System.Text.RegularExpressions;การใช้ System.Web.Http;การใช้ System.Web.Http.Controllers;การใช้ System.Web.Http.Dispatcher;namespace WebAPI กำหนดเอง { CustomControllerSelector คลาสสาธารณะ:DefaultHttpControllerSelector { HttpConfiguration ส่วนตัว _config; CustomControllerSelector สาธารณะ (การกำหนดค่า HTTPConfiguration) :ฐาน (config) { _config =config; } แทนที่สาธารณะ HttpControllerDescriptor SelectController (คำขอ HttpRequestMessage) { ตัวควบคุม var =GetControllerMapping (); var routeData =คำขอ GetRouteData (); var controllerName =routeData.Values["controller"].ToString(); ตัวควบคุม var =routeData.Values["controller"].ToString(); สตริง versionNumber =""; string regex =@"application\/vnd\.demo\.([a-z]+)\.v(?[0-9]+)\+([a-z]+)"; var acceptHeader =request.Headers.Accept .Where (a => Regex.IsMatch(a.MediaType, regex, RegexOptions.IgnoreCase)); if (acceptHeader.Any()){ การจับคู่ var =Regex.Match(acceptHeader.First().MediaType, regex, RegexOptions.IgnoreCase); versionNumber =match.Groups["version"].Value; ค่า; } HttpControllerDescriptor controllerDescriptor; ถ้า (versionNumber =="1"){ controllerName =string.Concat(controllerName, "V1"); } else if (versionNumber =="2"){ controllerName =string.Concat(controllerName, "V2"); } if (controllers.TryGetValue(controllerName, out controllerDescriptor)){ ส่งคืน controllerDescriptor; } คืนค่า null; } }}

WebApi.Config.cs

ตัวอย่าง

<ก่อนหน้า> WebApiConfig คลาสสแตติกสาธารณะ{ การลงทะเบียนโมฆะสแตติกสาธารณะ (การกำหนดค่า HttpConfiguration) { config.Services.Replace (typeof (IHttpControllerSelector), CustomControllerSelector ใหม่ (config)); config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute ( ชื่อ:"DefaultApi", routeTemplate:"api/{controller}/{id}", ค่าเริ่มต้น:new { id =RouteParameter.Optional } ); }}

StudentV1Controller

ตัวอย่าง

ใช้ DemoWebApplication.Models; ใช้ System.Collections.Generic; ใช้ System.Linq; ใช้ System.Web.Http;namespace DemoWebApplication.Controllers{ StudentV1Controller ระดับสาธารณะ :ApiController{ รายการ  นักเรียน =รายการใหม่ { ใหม่ StudentV1{ Id =1, Name ="Mark" }, StudentV1 ใหม่{ Id =2, Name ="John" } }; IEnumerable สาธารณะ Get(){ ส่งคืนนักเรียน; } รับ StudentV1 สาธารณะ (int id) { var studentForId =students.FirstOrDefault(x => x.Id ==id); ส่งคืนนักเรียนForId; } }}

StudentV2Controller

ตัวอย่าง

ใช้ DemoWebApplication.Models; ใช้ System.Collections.Generic; ใช้ System.Linq; ใช้ System.Web.Http;namespace DemoWebApplication.Controllers { StudentV2Controller ระดับสาธารณะ :ApiController{ รายการ  นักเรียน =รายการใหม่ { ใหม่ StudentV2{ Id =1, FirstName ="Roger", LastName ="Federer" }, StudentV2 ใหม่{ Id =2, FirstName ="Tom", LastName ="Bruce" } }; IEnumerable สาธารณะ Get(){ ส่งคืนนักเรียน; } รับ StudentV2 สาธารณะ (int id) { var studentForId =students.FirstOrDefault(x => x.Id ==id); ส่งคืนนักเรียนForId; } }}

ผลลัพธ์ด้านล่างแสดงผลลัพธ์ที่เราได้รับจากตัวควบคุม StudentV1 และ StudentV2 โดยมีการกำหนดเวอร์ชันในประเภทสื่อที่กำหนดเอง

จะทำการกำหนดเวอร์ชันด้วยประเภทสื่อที่กำหนดเองใน C # ASP.NET WebAPI ได้อย่างไร

จะทำการกำหนดเวอร์ชันด้วยประเภทสื่อที่กำหนดเองใน C # ASP.NET WebAPI ได้อย่างไร

ดังนั้นตอนนี้ หากเราต้องการได้ผลลัพธ์เดียวกันในรูปแบบ xml โดยใช้ประเภทสื่อแบบกำหนดเอง ให้เพิ่มประเภทสื่อแบบกำหนดเองด้านล่างใน webapiconfig.cs

ตัวอย่าง

<ก่อนหน้า>การลงทะเบียนโมฆะคงที่สาธารณะ (การกำหนดค่า HttpConfiguration) { config.MapHttpAttributeRoutes (); config.Services.Replace(typeof(IHttpControllerSelector), CustomControllerSelector(config) ใหม่); config.Formatters.XmlFormatter.SupportedMediaTypes .Add (ใหม่ MediaTypeHeaderValue("application/vnd.demo.student.v1+xml")); config.Formatters.XmlFormatter.SupportedMediaTypes .Add ( MediaTypeHeaderValue ใหม่ ("application/vnd.demo.student.v2+xml")); config.Routes.MapHttpRoute ( ชื่อ:"DefaultApi", routeTemplate:"api/{controller}/{id}", ค่าเริ่มต้น:new { id =RouteParameter.Optional } );}

จะทำการกำหนดเวอร์ชันด้วยประเภทสื่อที่กำหนดเองใน C # ASP.NET WebAPI ได้อย่างไร

ในตัวอย่างข้างต้น เราจะเห็นว่าผลลัพธ์อยู่ในรูปแบบ XML ตามที่ระบุไว้ในประเภทสื่อที่กำหนดเอง