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

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


ส่วนหัว Accept จะบอกเซิร์ฟเวอร์ว่าเบราว์เซอร์ต้องการข้อมูลรูปแบบไฟล์ใด รูปแบบไฟล์เหล่านี้มักเรียกว่าประเภท MIME MIME ย่อมาจาก Multipurpose Internet Mail Extensions

สามารถส่งการกำหนดเวอร์ชันได้ในส่วนหัวดังนี้

Version=1 StudentsV1ControllerVersion=2 StudentsV2Controller

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

เนื่องจากเรายังไม่ได้จัดการเวอร์ชันในส่วนหัวที่ยอมรับ เราจึงพบข้อผิดพลาด 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 โดยมีการกำหนดเวอร์ชันในส่วนหัวที่ยอมรับ

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

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