在訊息處理程序中,一系列訊息處理程序連結在一起。第一個處理程序接收 HTTP 請求,進行一些處理,然後將請求交給下一個處理程序。在某個時刻,響應會被創建並返回到鏈上。這種模式稱為委託處理程序。
除了內建的伺服器端訊息處理程序之外,我們還可以建立自己的伺服器端 HTTP 訊息處理程序。 建立自訂伺服器端 HTTP ASP.NET Web API 中的訊息處理程序,我們使用DelegatingHandler。我們必須建立一個從System.Net.Http.DelegatingHandler衍生的類別。然後,該自訂類別應重寫 SendAsync 方法。
Task6dd523501409924761d8a0f04c8cbf08 SendAsync(HttpRequestMessage request, CancellationToken CancellationToken);
該方法將 HttpRequestMessage 作為輸入並非同步返回 HttpResponseMessage。典型的實作執行以下操作:
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; } }#
以上是Asp.Net webAPI C# 中 DelegatingHandler 的用法是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!