ส่วนหัว Accept จะบอกเซิร์ฟเวอร์ว่าเบราว์เซอร์ต้องการข้อมูลรูปแบบไฟล์ใด รูปแบบไฟล์เหล่านี้มักเรียกว่าประเภท MIME MIME ย่อมาจาก Multipurpose Internet Mail Extensions
สามารถส่งการกำหนดเวอร์ชันได้ในส่วนหัวดังนี้
Version=1 StudentsV1ControllerVersion=2 StudentsV2Controller
เนื่องจากเรายังไม่ได้จัดการเวอร์ชันในส่วนหัวที่ยอมรับ เราจึงพบข้อผิดพลาด 404 ไม่พบ เนื่องจากเรามีเพียงคอนโทรลเลอร์ StudentV1 และ StudentV2 เท่านั้น ให้เราเพิ่ม CustomControllerSelector . ของเราเอง ซึ่งใช้คลาส DefaultHttpControllerSelector
CustomControllerSelector −
ตัวอย่าง
ใช้ System.Linq;ใช้ System.Net.Http;ใช้ System.Web.Http;ใช้ System.Web.Http.Controllers;โดยใช้ System.Web.Http.Dispatcher;namespace WebAPI.Custom{ คลาสสาธารณะ 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 =""; var acceptHeader =request.Headers.Accept.Where(a => a.Parameters .Count(p => p.Name.ToLower() =="รุ่น")> 0); if (acceptHeader.Any()){ versionNumber =acceptHeader.First().Parameters .First(p => p.Name.ToLower() =="version") ค่า; } 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; } }}
สิ่งต่อไปที่เราจำเป็นต้องเปลี่ยนตัวเลือกตัวควบคุมเริ่มต้นด้วยตัวเลือกตัวควบคุมแบบกำหนดเองของเรา สิ่งนี้ทำในไฟล์ WebApiConfig.cs ขอให้สังเกตว่าเรากำลังแทนที่ IHttpControllerSelector ด้วย CustomControllerSelector.DefaultHttpControllerSelector ของเราใช้ IHttpControllerSelector ดังนั้นเราจึงกำลังแทนที่ IHttpControllerSelector
ตัวอย่าง
<ก่อนหน้า> 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 โดยมีการกำหนดเวอร์ชันในส่วนหัวที่ยอมรับ