Maison > Article > développement back-end > Quelle est l'utilisation de DelegatingHandler dans Asp.Net webAPI C# ?
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 :
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.
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!