Maison  >  Article  >  développement back-end  >  Quelle est l'utilisation de DelegatingHandler dans Asp.Net webAPI C# ?

Quelle est l'utilisation de DelegatingHandler dans Asp.Net webAPI C# ?

PHPz
PHPzavant
2023-09-12 11:33:04648parcourir

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

Dans un gestionnaire de messages, une série de gestionnaires de messages sont liés entre eux. Le premier gestionnaire reçoit la requête HTTP, effectue un certain traitement, puis transmet la requête au gestionnaire suivant. À un moment donné, une réponse est créée et renvoyée à la chaîne. Ce modèle est appelé Delegated Handler.

En plus des gestionnaires de messages intégrés côté serveur, nous pouvons également créer nos propres gestionnaires de messages HTTP côté serveur. Créez un HTTP personnalisé côté serveur Pour les gestionnaires de messages dans l'API Web ASP.NET, nous utilisons DelegatingHandler. Nous devons créer une classe dérivée de System.Net.Http.DelegatingHandler. Cette classe personnalisée doit alors remplacer la méthode SendAsync.

Tâche6dd523501409924761d8a0f04c8cbf08 SendAsync (demande HttpRequestMessage, CancellationToken CancellationToken);

Cette méthode prend HttpRequestMessage en entrée et renvoie de manière asynchrone HttpResponseMessage. Une implémentation typique effectue les opérations suivantes :

  • Traitez le message de demande.
  • Appelez base.SendAsync pour envoyer la demande au gestionnaire interne.
  • Le gestionnaire interne renvoie un message de réponse. (Cette étape est asynchrone.)
  • Traitez la réponse et renvoyez-la à l'appelant.

Exemple

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

Les gestionnaires délégués peuvent également ignorer le gestionnaire interne et créer directement la réponse.

Exemple

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer