>  기사  >  백엔드 개발  >  Asp.Net webAPI C#에서 DelegatingHandler의 사용법은 무엇입니까?

Asp.Net webAPI C#에서 DelegatingHandler의 사용법은 무엇입니까?

PHPz
PHPz앞으로
2023-09-12 11:33:04606검색

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

메시지 핸들러에서는 일련의 메시지 핸들러가 함께 연결됩니다. 첫 번째 핸들러는 HTTP 요청을 수신하고 일부 처리를 수행한 후 요청을 다음 핸들러로 전달합니다. 어느 시점에서 응답이 생성되어 체인으로 반환됩니다. 이 패턴을 Delegated Handler라고 합니다.

내장된 서버 측 메시지 핸들러 외에도 자체 서버 측 HTTP 메시지 핸들러를 만들 수도 있습니다. 사용자 정의 서버측 HTTP 생성 ASP.NET Web API의 메시지 처리기 에는 DelegatingHandler를 사용합니다. System.Net.Http.DelegatingHandler에서 파생된 클래스를 만들어야 합니다. 그런 다음 이 사용자 정의 클래스는 SendAsync 메서드를 재정의해야 합니다.

Task6dd523501409924761d8a0f04c8cbf08 SendAsync(HttpRequestMessage 요청, CancellationToken CancellationToken);

이 메서드는 HttpRequestMessage를 입력으로 사용하고 비동기적으로 반환합니다. HttpResponse메시지. 일반적인 구현은 다음을 수행합니다.

  • 요청 메시지를 처리합니다.
  • base.SendAsync를 호출하여 요청을 내부 핸들러로 보냅니다.
  • 내부 핸들러가 응답 메시지를 반환합니다. (이 단계는 비동기식입니다.)
  • 응답을 처리하여 호출자에게 반환합니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제