示例#1
0
        /// <summary>
        /// CONSTRUCTOR
        /// </summary>
        /// <param name="baseAddress">the <code>Uri</code> HTTP endpoint in the service.</param>
        /// <param name="authenticationHeaderProvider">the <see cref="IAuthorizationHeaderProvider"/> that will provide the
        ///     authorization token for the HTTP communication.</param>
        /// <param name="httpTransportSettings"> Specifies HTTP Transport Settings for the request</param>
        public ContractApiHttp(
            Uri baseAddress,
            IAuthorizationHeaderProvider authenticationHeaderProvider,
            HttpTransportSettings httpTransportSettings)
        {
            _baseAddress = baseAddress;
            _authenticationHeaderProvider = authenticationHeaderProvider;

            _httpClientHandler = new HttpClientHandler
            {
                // Cannot specify a specific protocol here, as desired due to an error:
                //   ProvisioningDeviceClient_ValidRegistrationId_AmqpWithProxy_SymmetricKey_RegisterOk_GroupEnrollment failing for me with System.PlatformNotSupportedException: Operation is not supported on this platform.
                // When revisiting TLS12 work for DPS, we should figure out why. Perhaps the service needs to support it.

                //SslProtocols = TlsVersions.Preferred,
                CheckCertificateRevocationList = TlsVersions.Instance.CertificateRevocationCheck
            };

            IWebProxy webProxy = httpTransportSettings.Proxy;

            if (webProxy != DefaultWebProxySettings.Instance)
            {
                _httpClientHandler.UseProxy = webProxy != null;
                _httpClientHandler.Proxy    = webProxy;
            }

            _httpClientObj = new HttpClient(_httpClientHandler)
            {
                BaseAddress = _baseAddress,
                Timeout     = s_defaultOperationTimeout,
            };
            _httpClientObj.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(MediaTypeForDeviceManagementApis));
            _httpClientObj.DefaultRequestHeaders.ExpectContinue = false;
        }
        public HttpClientHelper(
            Uri baseAddress,
            IAuthorizationHeaderProvider authenticationHeaderProvider,
            IDictionary <HttpStatusCode, Func <HttpResponseMessage, Task <Exception> > > defaultErrorMapping,
            TimeSpan timeout,
            Action <HttpClient> preRequestActionForAllRequests)
        {
            this.baseAddress = baseAddress;
            this.authenticationHeaderProvider = authenticationHeaderProvider;
            this.defaultErrorMapping          =
                new ReadOnlyDictionary <HttpStatusCode, Func <HttpResponseMessage, Task <Exception> > >(defaultErrorMapping);
            this.defaultOperationTimeout = timeout;

            this.httpClientObj             = new HttpClient();
            this.httpClientObj.BaseAddress = this.baseAddress;
            this.httpClientObj.Timeout     = timeout;
            this.httpClientObj.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(CommonConstants.MediaTypeForDeviceManagementApis));
            this.httpClientObj.DefaultRequestHeaders.ExpectContinue = false;

            this.httpClientObjWithPerRequestTimeout             = new HttpClient();
            this.httpClientObjWithPerRequestTimeout.BaseAddress = this.baseAddress;
            this.httpClientObjWithPerRequestTimeout.Timeout     = Timeout.InfiniteTimeSpan;
            this.httpClientObjWithPerRequestTimeout.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(CommonConstants.MediaTypeForDeviceManagementApis));
            this.httpClientObjWithPerRequestTimeout.DefaultRequestHeaders.ExpectContinue = false;

            if (preRequestActionForAllRequests != null)
            {
                preRequestActionForAllRequests(this.httpClientObj);
                preRequestActionForAllRequests(this.httpClientObjWithPerRequestTimeout);
            }
        }
        /// <summary>
        /// CONSTRUCTOR
        /// </summary>
        /// <param name="baseAddress">the <code>Uri</code> HTTP endpoint in the service.</param>
        /// <param name="authenticationHeaderProvider">the <see cref="IAuthorizationHeaderProvider"/> that will provide the
        ///     authorization token for the HTTP communication.</param>
        /// <param name="httpTransportSettings"> Specifies HTTP Transport Settings for the request</param>
        public ContractApiHttp(
            Uri baseAddress,
            IAuthorizationHeaderProvider authenticationHeaderProvider,
            HttpTransportSettings httpTransportSettings)
        {
            _baseAddress = baseAddress;
            _authenticationHeaderProvider = authenticationHeaderProvider;

            IWebProxy webProxy = httpTransportSettings.Proxy;

            if (webProxy != DefaultWebProxySettings.Instance)
            {
                HttpClientHandler httpClientHandler = new HttpClientHandler();
                httpClientHandler.UseProxy = (webProxy != null);
                httpClientHandler.Proxy    = webProxy;
                _httpClientObj             = new HttpClient(httpClientHandler);
            }
            else
            {
                _httpClientObj = new HttpClient();
            }
            _httpClientObj.BaseAddress = _baseAddress;
            _httpClientObj.Timeout     = s_defaultOperationTimeout;
            _httpClientObj.DefaultRequestHeaders.Accept.Add(
                new MediaTypeWithQualityHeaderValue(MediaTypeForDeviceManagementApis));
            _httpClientObj.DefaultRequestHeaders.ExpectContinue = false;
        }
        public HttpClientHelper(
            Uri baseAddress,
            IAuthorizationHeaderProvider authenticationHeaderProvider,
            IReadOnlyDictionary <HttpStatusCode, Func <HttpResponseMessage, Task <Exception> > > defaultErrorMapping,
            TimeSpan timeout,
            IWebProxy customHttpProxy,
            int connectionLeaseTimeoutMilliseconds)
        {
            _baseAddress = baseAddress;
            _authenticationHeaderProvider = authenticationHeaderProvider;
            _defaultErrorMapping          = defaultErrorMapping;
            _defaultOperationTimeout      = timeout;

            // We need two types of HttpClients, one with our default operation timeout, and one without. The one without will rely on
            // a cancellation token.

            _httpClientWithDefaultTimeout         = CreateDefaultClient(customHttpProxy, _baseAddress, connectionLeaseTimeoutMilliseconds);
            _httpClientWithDefaultTimeout.Timeout = _defaultOperationTimeout;
            _httpClientWithDefaultTimeout.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(CommonConstants.MediaTypeForDeviceManagementApis));
            _httpClientWithDefaultTimeout.DefaultRequestHeaders.ExpectContinue = false;

            _httpClientWithNoTimeout         = CreateDefaultClient(customHttpProxy, _baseAddress, connectionLeaseTimeoutMilliseconds);
            _httpClientWithNoTimeout.Timeout = Timeout.InfiniteTimeSpan;
            _httpClientWithNoTimeout.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(CommonConstants.MediaTypeForDeviceManagementApis));
            _httpClientWithNoTimeout.DefaultRequestHeaders.ExpectContinue = false;

            TlsVersions.Instance.SetLegacyAcceptableVersions();
        }
        /// <summary>
        /// CONSTRUCTOR
        /// </summary>
        /// <param name="baseAddress">the <code>Uri</code> HTTP endpoint in the service.</param>
        /// <param name="authenticationHeaderProvider">the <see cref="IAuthorizationHeaderProvider"/> that will provide the
        ///     authorization token for the HTTP communication.</param>
        /// <param name="preRequestActionForAllRequests">the function with the HTTP pre-request actions.</param>
        public ContractApiHttp(
            Uri baseAddress,
            IAuthorizationHeaderProvider authenticationHeaderProvider,
            Action <HttpClient> preRequestActionForAllRequests)
        {
            _baseAddress = baseAddress;
            _authenticationHeaderProvider = authenticationHeaderProvider;

            _httpClientObj             = new HttpClient();
            _httpClientObj.BaseAddress = _baseAddress;
            _httpClientObj.Timeout     = s_defaultOperationTimeout;
            _httpClientObj.DefaultRequestHeaders.Accept.Add(
                new MediaTypeWithQualityHeaderValue(CommonConstants.MediaTypeForDeviceManagementApis));
            _httpClientObj.DefaultRequestHeaders.ExpectContinue = false;

            _httpClientObjWithPerRequestTimeout             = new HttpClient();
            _httpClientObjWithPerRequestTimeout.BaseAddress = _baseAddress;
            _httpClientObjWithPerRequestTimeout.Timeout     = Timeout.InfiniteTimeSpan;
            _httpClientObjWithPerRequestTimeout.DefaultRequestHeaders.Accept.Add(
                new MediaTypeWithQualityHeaderValue(CommonConstants.MediaTypeForDeviceManagementApis));
            _httpClientObjWithPerRequestTimeout.DefaultRequestHeaders.ExpectContinue = false;

            if (preRequestActionForAllRequests != null)
            {
                preRequestActionForAllRequests(_httpClientObj);
                preRequestActionForAllRequests(_httpClientObjWithPerRequestTimeout);
            }
        }
 public HttpClientHelper(
     Uri baseAddress,
     IAuthorizationHeaderProvider authenticationHeaderProvider,
     TimeSpan timeout)
 {
     this.baseAddress = baseAddress;
     this.authenticationHeaderProvider = authenticationHeaderProvider;
 }
 public HttpClientHelper(
     Uri baseAddress,
     IAuthorizationHeaderProvider authenticationHeaderProvider,
     TimeSpan timeout)
 {
     this.baseAddress = baseAddress;
     this.authenticationHeaderProvider = authenticationHeaderProvider;
 }
示例#8
0
        public void ConfigKeyShouldBeSet()
        {
            GithubActionsClient          client = new GithubActionsClient();
            IAuthorizationHeaderProvider authorizationHeaderProvider = client.AuthorizationHeaderProvider;
            string configKey = authorizationHeaderProvider.ConfigKey;

            configKey.ShouldNotBeNull();
            configKey.ShouldNotBeBlank();
            Pass(nameof(ConfigKeyShouldBeSet));
        }
        /// <summary>
        /// CONSTRUCTOR
        /// </summary>
        /// <param name="baseAddress">the <code>Uri</code> HTTP endpoint in the service.</param>
        /// <param name="authenticationHeaderProvider">the <see cref="IAuthorizationHeaderProvider"/> that will provide the
        ///     authorization token for the HTTP communication.</param>
        /// <param name="preRequestActionForAllRequests">the function with the HTTP pre-request actions.</param>
        public ContractApiHttp(
            Uri baseAddress,
            IAuthorizationHeaderProvider authenticationHeaderProvider)
        {
            _baseAddress = baseAddress;
            _authenticationHeaderProvider = authenticationHeaderProvider;

            _httpClientObj             = new HttpClient();
            _httpClientObj.BaseAddress = _baseAddress;
            _httpClientObj.Timeout     = s_defaultOperationTimeout;
            _httpClientObj.DefaultRequestHeaders.Accept.Add(
                new MediaTypeWithQualityHeaderValue(MediaTypeForDeviceManagementApis));
            _httpClientObj.DefaultRequestHeaders.ExpectContinue = false;
        }
 public HttpClientHelper(
     Uri baseAddress,
     IAuthorizationHeaderProvider authenticationHeaderProvider,
     IDictionary <HttpStatusCode, Func <HttpResponseMessage, Task <Exception> > > defaultErrorMapping,
     TimeSpan timeout,
     Action <HttpClient> preRequestActionForAllRequests,
     IWebProxy customHttpProxy)
 {
     this.baseAddress = baseAddress;
     this.authenticationHeaderProvider = authenticationHeaderProvider;
     this.defaultErrorMapping          =
         new ReadOnlyDictionary <HttpStatusCode, Func <HttpResponseMessage, Task <Exception> > >(defaultErrorMapping);
     this.defaultOperationTimeout = timeout;
     TlsVersions.Instance.SetLegacyAcceptableVersions();
 }
示例#11
0
        public HttpClientHelper(
            Uri baseAddress,
            IAuthorizationHeaderProvider authenticationHeaderProvider,
            IDictionary <HttpStatusCode, Func <HttpResponseMessage, Task <Exception> > > defaultErrorMapping,
            TimeSpan timeout,
            IWebProxy customHttpProxy)
        {
            _baseAddress = baseAddress;
            _authenticationHeaderProvider = authenticationHeaderProvider;
            _defaultErrorMapping          = new ReadOnlyDictionary <HttpStatusCode, Func <HttpResponseMessage, Task <Exception> > >(defaultErrorMapping);
            _defaultOperationTimeout      = timeout;

            // HttpClientHandler is IDisposable, so save onto it for disposing.
            _httpClientHandler = new HttpClientHandler
            {
#if !NET451
                SslProtocols = TlsVersions.Instance.Preferred,
                CheckCertificateRevocationList = TlsVersions.Instance.CertificateRevocationCheck,
#endif
            };

            if (customHttpProxy != DefaultWebProxySettings.Instance)
            {
                _httpClientHandler.UseProxy = customHttpProxy != null;
                _httpClientHandler.Proxy    = customHttpProxy;
            }

            // We need two types of HttpClients, one with our default operation timeout, and one without. The one without will rely on
            // a cancellation token.

            _httpClientWithDefaultTimeout = new HttpClient(_httpClientHandler, false)
            {
                BaseAddress = _baseAddress,
                Timeout     = _defaultOperationTimeout,
            };
            _httpClientWithDefaultTimeout.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(CommonConstants.MediaTypeForDeviceManagementApis));
            _httpClientWithDefaultTimeout.DefaultRequestHeaders.ExpectContinue = false;

            _httpClientWithNoTimeout = new HttpClient(_httpClientHandler, false)
            {
                BaseAddress = _baseAddress,
                Timeout     = Timeout.InfiniteTimeSpan,
            };
            _httpClientWithNoTimeout.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(CommonConstants.MediaTypeForDeviceManagementApis));
            _httpClientWithNoTimeout.DefaultRequestHeaders.ExpectContinue = false;

            TlsVersions.Instance.SetLegacyAcceptableVersions();
        }
示例#12
0
        public HttpClientHelper(
            Uri baseAddress,
            IAuthorizationHeaderProvider authenticationHeaderProvider,
            IDictionary <HttpStatusCode, Func <HttpResponseMessage, Task <Exception> > > defaultErrorMapping,
            TimeSpan timeout,
            Action <HttpClient> preRequestActionForAllRequests,
#if !WINDOWS_UWP && !PCL
            X509Certificate2 clientCert,
#endif
            ProductInfo productInfo
            )
        {
            this.baseAddress = baseAddress;
            this.authenticationHeaderProvider = authenticationHeaderProvider;
            this.defaultErrorMapping          =
                new ReadOnlyDictionary <HttpStatusCode, Func <HttpResponseMessage, Task <Exception> > >(defaultErrorMapping);

#if !WINDOWS_UWP && !PCL && !NETSTANDARD1_3
            WebRequestHandler handler = null;
            if (clientCert != null)
            {
                handler = new WebRequestHandler();
                handler.ClientCertificates.Add(clientCert);
                this.usingX509ClientCert = true;
            }

            this.httpClientObj = handler != null ? new HttpClient(handler) : new HttpClient();
#else
            this.httpClientObj = new HttpClient();
#endif

            this.httpClientObj.BaseAddress = this.baseAddress;
            this.httpClientObj.Timeout     = timeout;
            this.httpClientObj.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(CommonConstants.MediaTypeForDeviceManagementApis));
            this.httpClientObj.DefaultRequestHeaders.ExpectContinue = false;
            if (preRequestActionForAllRequests != null)
            {
                preRequestActionForAllRequests(this.httpClientObj);
            }
            this.productInfo = productInfo;
        }