ในตัวจัดการข้อความ ชุดของตัวจัดการข้อความจะถูกเชื่อมโยงเข้าด้วยกัน ตัวจัดการแรกได้รับการร้องขอ HTTP ทำการประมวลผลบางอย่าง และให้การร้องขอไปยังตัวจัดการถัดไป เมื่อถึงจุดหนึ่ง การตอบสนองจะถูกสร้างขึ้นและย้อนกลับไปยังห่วงโซ่ รูปแบบนี้เรียกว่า ตัวจัดการการมอบสิทธิ์ .
นอกจากตัวจัดการข้อความฝั่งเซิร์ฟเวอร์ในตัวแล้ว เรายังสามารถสร้างตัวจัดการข้อความ HTTP ฝั่งเซิร์ฟเวอร์ของเราเองได้อีกด้วย เพื่อสร้างตัวจัดการ HTTPMessage ฝั่งเซิร์ฟเวอร์ที่กำหนดเอง ใน ASP.NET Web API เราใช้ประโยชน์จาก DelegatingHandler . เราต้องสร้างคลาสที่ได้มาจาก System.Net.Http.DelegatingHandler . คลาสที่กำหนดเองนั้นควรแทนที่ SendAsync วิธีการ
งาน
เมธอดนี้ใช้ HttpRequestMessage เป็นอินพุตและส่งกลับ anHttpResponseMessage แบบอะซิงโครนัส การใช้งานทั่วไปทำสิ่งต่อไปนี้ -
- ประมวลผลข้อความขอ
- โทร base.SendAsync เพื่อส่งคำขอไปยังตัวจัดการภายใน
- ตัวจัดการภายในส่งคืนข้อความตอบกลับ (ขั้นตอนนี้ไม่พร้อมกัน)
- ประมวลผลการตอบกลับและส่งกลับไปยังผู้โทร
ตัวอย่าง
public class CustomMessageHandler : DelegatingHandler{
protected async override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, CancellationToken cancellationToken){
Debug.WriteLine("CustomMessageHandler processing the request");
// Calling the inner handler
var response = await base.SendAsync(request, cancellationToken);
Debug.WriteLine("CustomMessageHandler processing the response");
return response;
}
} ตัวจัดการการมอบสิทธิ์สามารถข้ามตัวจัดการภายในและสร้างการตอบสนองได้โดยตรง
ตัวอย่าง
public class CustomMessageHandler: DelegatingHandler{
protected override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, CancellationToken cancellationToken){
// Create the response
var response = new HttpResponseMessage(HttpStatusCode.OK){
Content = new StringContent("Skipping the inner handler")
};
// TaskCompletionSource creates a task that does not contain a delegate
var taskCompletion = new TaskCompletionSource<HttpResponseMessage>();
taskCompletion.SetResult(response);
return taskCompletion.Task;
}
}