Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apakah kegunaan DelegatingHandler dalam Asp.Net webAPI C#?

Apakah kegunaan DelegatingHandler dalam Asp.Net webAPI C#?

PHPz
PHPzke hadapan
2023-09-12 11:33:04607semak imbas

Asp.Net webAPI C# 中 DelegatingHandler 的用法是什么?

Dalam pengendali mesej, satu siri pengendali mesej dipautkan bersama. Pengendali pertama menerima permintaan HTTP, melakukan beberapa pemprosesan, dan kemudian menyerahkan permintaan itu kepada pengendali seterusnya. Pada satu ketika, respons dibuat dan dikembalikan ke rantai. Corak ini dipanggil Pengendali Diwakilkan.

Selain pengendali mesej bahagian pelayan terbina dalam, kami juga boleh mencipta pengendali mesej HTTP sebelah pelayan kami sendiri. Buat HTTP sisi pelayan tersuai Untuk pengendali mesej dalam API Web ASP.NET, kami menggunakan DelegatingHandler. Kita perlu mencipta kelas yang diperoleh daripada System.Net.Http.DelegatingHandler. Kelas tersuai ini kemudiannya harus mengatasi kaedah SendAsync.

Task6dd523501409924761d8a0f04c8cbf08 CancellationToken CancellationToken);

Kaedah ini mengambil HttpRequestMessage sebagai input dan kembali secara tidak segerak HttpResponseMessage. Pelaksanaan biasa melakukan perkara berikut:

  • Memproses mesej permintaan.
  • Panggilan pangkalan.SendAsync untuk menghantar permintaan kepada pengendali dalaman.
  • Pengendali dalaman mengembalikan mesej respons. (Langkah ini tidak segerak.)
  • Proses respons dan kembalikan kepada pemanggil.

Contoh

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;
   }
}

Pengendali yang diwakilkan juga boleh melangkau pengendali dalaman dan mencipta respons secara langsung.

Contoh

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;
   }
}

Atas ialah kandungan terperinci Apakah kegunaan DelegatingHandler dalam Asp.Net webAPI C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam