Heim  >  Artikel  >  Backend-Entwicklung  >  Wozu dient DelegatingHandler in Asp.Net webAPI C#?

Wozu dient DelegatingHandler in Asp.Net webAPI C#?

PHPz
PHPznach vorne
2023-09-12 11:33:04647Durchsuche

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

In einem Message-Handler sind eine Reihe von Message-Handlern miteinander verknüpft. Der erste Handler empfängt die HTTP-Anfrage, führt einige Verarbeitungsvorgänge durch und übergibt die Anfrage dann an den nächsten Handler. Irgendwann wird eine Antwort erstellt und an die Kette zurückgegeben. Dieses Muster heißt Delegated Handler.

Zusätzlich zu den integrierten serverseitigen Nachrichtenhandlern können wir auch unsere eigenen serverseitigen HTTP-Nachrichtenhandler erstellen. Erstellen Sie benutzerdefiniertes serverseitiges HTTP Für Nachrichtenhandler in der ASP.NET-Web-API verwenden wir DelegatingHandler. Wir müssen eine von System.Net.Http.DelegatingHandler abgeleitete Klasse erstellen. Diese benutzerdefinierte Klasse sollte dann die Methode SendAsync überschreiben.

Task6dd523501409924761d8a0f04c8cbf08 SendAsync(HttpRequestMessage request, CancellationToken CancellationToken);

Diese Methode verwendet HttpRequestMessage als Eingabe und gibt asynchron zurück HttpResponseMessage. Eine typische Implementierung führt Folgendes aus:

  • Verarbeiten der Anforderungsnachricht.
  • Rufen Sie base.SendAsync auf, um die Anfrage an den internen Handler zu senden.
  • Der interne Handler gibt eine Antwortnachricht zurück. (Dieser Schritt ist asynchron.)
  • Verarbeiten Sie die Antwort und senden Sie sie an den Anrufer zurück.

Beispiel

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

Delegierte Handler können den inneren Handler auch überspringen und die Antwort direkt erstellen.

Beispiel

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

Das obige ist der detaillierte Inhalt vonWozu dient DelegatingHandler in Asp.Net webAPI C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen