コード例 #1
0
        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;
            }));
        }
コード例 #2
0
ファイル: CommunityFilter.cs プロジェクト: d0972058277/v3
        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));
        }
コード例 #3
0
        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;
            }));
        }
コード例 #4
0
 public void Dispose()
 {
     InnerFilter.Dispose();
     GC.SuppressFinalize(this);
 }