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

PHPz
풀어 주다: 2023-09-12 11:33:04
앞으로
643명이 탐색했습니다.

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

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

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

Task 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으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿