다음을 통해 공유


Windows.Web.Http.Filters 네임스페이스

UWP 앱에서 HTTP 및 REST 서비스를 대상으로 하는 필터를 만드는 HTTP 요청 및 인터페이스를 보내는 클래스를 제공합니다.

클래스

HttpBaseProtocolFilter

HttpClient instance 대한 기본 프로토콜 필터입니다.

HttpCacheControl

Windows.Web.Http 및 Windows.Web.Http.Filters 네임스페이스의 메서드에 의한 HTTP 요청에 대한 응답에 대한 로컬 HTTP 캐시 제어를 제공합니다.

HttpServerCustomValidationRequestedEventArgs

ServerCustomValidationRequested 이벤트에 대한 데이터를 제공합니다.

인터페이스

IHttpFilter

HttpClient instance 대한 사용자 지정 필터를 구현하는 데 사용되는 인터페이스입니다.

열거형

HttpCacheReadBehavior

Windows.Web.Http 및 Windows.Web.Http.Filters 네임스페이스의 클래스 메서드별 읽기 요청이 응답에 로컬 HTTP 캐시를 사용하는지 나타냅니다.

HttpCacheWriteBehavior

Windows.Web.Http 및 Windows.Web.Http.Filters 네임스페이스의 클래스 메서드에서 사용하는 요청에서 반환된 콘텐츠가 로컬 HTTP 캐시에 기록되는지를 나타냅니다.

HttpCookieUsageBehavior

CookieUsageBehavior 속성에 사용되는 쿠키 사용 동작을 정의합니다.

설명

Windows.Web.Http 네임스페이스 및 관련 Windows.Web.Http.Headers 및 Windows.Web.Http.Filters 네임스페이스는 HTTP 서비스에 연결하려는 UWP 앱에 대한 HTTP 프로그래밍 인터페이스를 제공합니다. HTTP API는 개발자를 위해 JavaScript, C#, VB.NET 및 C++에서 일관된 지원을 제공합니다. 또한 API는 요청 및 응답에 대한 사용자 지정 필터 추가를 지원합니다. 필터는 더 복잡한 네트워크 문제 처리를 간소화할 수 있습니다. 또한 API를 사용하면 앱 컨트롤이 캐싱 동작을 읽고 쓸 수 있습니다.

Windows.Web.Http 네임스페이스의 클래스는 Windows.Web.Http.Filters 네임스페이스의 클래스를 기반으로 필터 사용을 지원합니다. Windows.Web.Http.Filters 네임스페이스의 클래스를 사용하면 앱 컨트롤이 클라이언트에서 캐싱 동작을 읽고 쓸 수도 있습니다. Windows.Web.Http.HeadersHttpCacheDirectiveHeaderValueCollection은 HTTP 요청 또는 응답과 연결된 HTTP 콘텐츠의 Cache-Control HTTP 헤더에 있는 캐시 지시문 인스턴스에 대한 컬렉션 컨테이너를 제공합니다. Cache-Control 헤더를 사용하면 앱이 캐싱 동작을 더 많이 제어할 수 있습니다.

Windows.Web.Http.Headers 네임스페이스의 클래스는 IETF에서 RFC 2616에 정의된 HTTP 헤더를 나타냅니다.

Windows.Web.Http 네임스페이스의 HttpClient 클래스는 HTTP 요청을 보내고 HTTP 응답을 수신하기 위한 기본 클래스를 제공합니다. 필터는 일반적인 HTTP 서비스 문제에 도움이 되는 처리기 메커니즘을 제공합니다. 더 복잡한 HTTP 서비스 문제를 처리하기 위해 간단한 필터를 시퀀스로 함께 연결할 수 있습니다.

HTTP 필터는 HTTP 요청 메시지를 사용하고 HTTP 응답 메시지를 생성하는 블랙박스입니다. 필터가 HTTP 응답을 가져오는 방법은 필터 개발자가 결정합니다. 필터는 일반적으로 헤더를 추가하거나 변경하거나, 권한 부여( WebAuthenticationBroker 사용)를 처리하거나, 네트워크 조건에 따라 요청을 허용하거나 허용하지 않습니다. 필터는 일반적으로 변경한 다음 내부 필터에 요청을 전달합니다. 이 필터는 일반적으로 필터가 생성될 때 설정됩니다.

이 방법을 사용하면 필터가 HTTP 요청 실행의 특정 측면만 담당하고 다른 측면을 다른 필터에 위임할 수 있습니다. 필터는 캐싱, 인증, 리디렉션, 쿠키, 서버와의 실제 통신 또는 이러한 조합을 구현할 수 있습니다. 가장 낮은(기본) 필터는 일반적으로 네트워크와의 실제 통신을 수행하는 필터입니다.

네트워크 액세스에 HTTP를 사용하는 많은 앱은 종종 다양한 조건에 응답해야 합니다. 몇 가지 일반적인 예는 다음과 같습니다.

  • 네트워크 다시 시도(백오프 사용).
  • 데이터 통신 네트워크에 맞게 조정(예를 들어 네트워크 연결이 로밍되는 경우).
  • 소셜 네트워크 사이트에 대한 인증.
  • 로깅 및 원격 분석.

이러한 네트워크 문제를 스스로 처리하는 것은 어렵지 않습니다. 이러한 문제 중 몇 가지를 결합하면 복잡한 문제가 됩니다. Windows.Web.Http.Filters 네임스페이스에서 사용자 지정 필터를 지원하면 개발자가 간단한 필터에 대한 모듈식 코드를 만들 수 있습니다. 일련의 간단한 필터를 필터 체인에 연결하여 복잡한 문제 조합을 처리할 수 있습니다. 개발자는 필터 체인에 대한 모든 것을 선택합니다.

  • 추가할 필터입니다.
  • 필터 체인에 배치하는 순서입니다.

HttpClient는 HTTP를 통해 요청을 보내고 받는 데 사용되는 기본 클래스입니다. HttpBaseProtocolFilterHttpClient 가 데이터를 보내고 받는 데 사용하는 것입니다. 따라서 HttpBaseProtocolFilter 는 일반적으로 사용자 지정 필터 체인의 맨 아래에 있습니다. HttpBaseProtocolFilter 를 사용하여 HTTP 연결의 캐싱 및 기타 동작을 제어할 수도 있습니다. 각 HttpClient instance 다른 필터 체인 또는 파이프라인을 가질 수 있습니다.

HTTP 필터 체인 그리기

사용자 지정 필터를 작성하기 위해 앱은 IHttpFilter 인터페이스의 사용자 지정 버전을 구현합니다. 필터 동작을 구현하는 코드는 IHttpFilter.SendRequestAsync 메서드에 있습니다. 필터는 C#/VB.NET 또는 C++로 작성할 수 있습니다. JavaScript를 포함하여 UWP 앱에 지원되는 모든 언어에서 필터를 호출하고 사용할 수 있습니다.

샘플 코드는 HTTP 요청 및 응답에 사용자 지정 헤더를 추가하는 필터를 보여 줍니다.

public class PlugInFilter : IHttpFilter {
    private IHttpFilter innerFilter;

    public PlugInFilter(IHttpFilter innerFilter) {
        if (innerFilter == null) {
            throw new ArgumentException("innerFilter cannot be null.");
        }
        this.innerFilter = innerFilter;
    }

    public IAsyncOperationWithProgress<HttpResponseMessage, HttpProgress> SendRequestAsync(HttpRequestMessage request) {
        return AsyncInfo.Run<HttpResponseMessage, HttpProgress>(async (cancellationToken, progress) =>
        {
            request.Headers.Add("Custom-Header", "CustomRequestValue");
            HttpResponseMessage response = await innerFilter.SendRequestAsync(request).AsTask(cancellationToken, progress);

            cancellationToken.ThrowIfCancellationRequested();

            response.Headers.Add("Custom-Header", "CustomResponseValue");
        return response;
        });
    }

    public void Dispose() {
        innerFilter.Dispose();
        GC.SuppressFinalize(this);
    }
}

필터를 사용하기 위해 앱은 HttpClient(IHttpFilter) 생성자를 사용하여 HttpClient instance 사용할 필터의 인터페이스를 전달합니다. 필터 체인을 설정하기 위해 새 필터는 이전 필터와 아래쪽 의 HttpBaseProtocolFilter 에 연결됩니다.

샘플 코드는 사용자 지정 필터를 사용하기 위해 HttpClient 를 만드는 방법을 보여 있습니다.

internal static void CreateHttpClient(ref HttpClient httpClient)
{
    if (httpClient != null) {
        httpClient.Dispose();
    }

    // HttpClient can be extended by plugging multiple filters together,
    // providing HttpClient with the configured filter pipeline.
    var baseFilter = new HttpBaseProtocolFilter();

    // Adds a custom header to every request and response message.
    var myFilter = new PlugInFilter(baseFilter);
    httpClient = new HttpClient(myFilter);

}

추가 정보