public IAsyncOperationWithProgress <HttpResponseMessage, HttpProgress> SendRequestAsync(HttpRequestMessage request) { return(AsyncInfo.Run <HttpResponseMessage, HttpProgress>(async(cancellationToken, progress) => { var sendRequest = request; if (_addHeader) { sendRequest = CopyRequest(request); } HttpResponseMessage response = await InnerFilter.SendRequestAsync(sendRequest).AsTask(cancellationToken, progress); if (!_addHeader && !response.IsSuccessStatusCode) { var responseContent = await response.Content.ReadAsStringAsync(); var msg = new ResponseMessage(XDocument.Parse(responseContent)); if (msg.Fault != null) { var requestCopy = CopyRequest(request); response = await InnerFilter.SendRequestAsync(requestCopy).AsTask(cancellationToken, progress); if (response.IsSuccessStatusCode) { _addHeader = true; } } } return response; })); }
public bool Filter(IConditionField conditionField) { if (conditionField is CommunityStructs) { var conditions = (CommunityStructs)conditionField; if (!CommunityStructs.Any(community => conditions.Contains(community))) { return(false); } } return(InnerFilter.Filter(conditionField)); }
public IAsyncOperationWithProgress <HttpResponseMessage, HttpProgress> SendRequestAsync(HttpRequestMessage request) { return(AsyncInfo.Run <HttpResponseMessage, HttpProgress>(async(cancellationToken, progress) => { DigestAuthParameters p; if (_parameters.TryGetValue(request.RequestUri, out p)) { var authorizationHeader = GetAuthorizationHeader(p); request.Headers.Authorization = authorizationHeader; } HttpResponseMessage response = await InnerFilter.SendRequestAsync(request).AsTask(cancellationToken, progress); if (response.StatusCode == HttpStatusCode.Unauthorized && response.Headers.WwwAuthenticate.Any()) { var authHeader = response.Headers.WwwAuthenticate[0]; bool isDigest = authHeader.Scheme == "Digest"; if (isDigest) { if (p != null) { _parameters.Remove(request.RequestUri); } var authParameters = InitDigestAuthParameters(authHeader, response); _parameters.Add(request.RequestUri, authParameters); var authorizationHeader = GetAuthorizationHeader(authParameters); var requestCopy = request.Clone(); requestCopy.Headers.Authorization = authorizationHeader; response = await InnerFilter.SendRequestAsync(requestCopy).AsTask(cancellationToken, progress); var headerValue = response.Headers.WwwAuthenticate.FirstOrDefault(h => h.Scheme == "Digest"); if (headerValue != null) { var nonceParam = headerValue.Parameters.FirstOrDefault(hp => hp.Name == "nonce"); authParameters.Nonce = nonceParam.Value; } } } return response; })); }
public void Dispose() { InnerFilter.Dispose(); GC.SuppressFinalize(this); }