메시지 처리기에서는 일련의 메시지 처리기가 함께 연결됩니다. 첫 번째 핸들러는 HTTP 요청을 수신하고 일부 처리를 수행하고 요청을 다음 핸들러에 제공합니다. 어느 시점에서 응답이 생성되고 다시 체인으로 이동합니다. 이 패턴을 위임 핸들러라고 합니다. .
내장된 서버 측 메시지 핸들러와 함께 자체 서버 측 HTTP 메시지 핸들러를 생성할 수도 있습니다. 사용자 정의 서버 측 HTTPMessage 핸들러를 생성하려면 ASP.NET Web API에서는 DelegatingHandler를 사용합니다. . System.Net.Http.DelegatingHandler에서 파생된 클래스를 만들어야 합니다. . 그러면 해당 사용자 정의 클래스가 SendAsync를 재정의해야 합니다. 방법.
태스크
이 메서드는 HttpRequestMessage를 입력으로 사용하고 비동기적으로 HttpResponseMessage를 반환합니다. 일반적인 구현은 다음을 수행합니다. -
- 요청 메시지를 처리합니다.
- 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; } }