コード例 #1
0
ファイル: ElasticClient-Get.cs プロジェクト: GopiKand/NEST
 /// <inheritdoc />
 public Task <IGetResponse <T> > GetAsync <T>(IGetRequest getRequest) where T : class
 {
     return(this.DispatchAsync <IGetRequest, GetRequestParameters, GetResponse <T>, IGetResponse <T> >(
                getRequest,
                (p, d) => this.RawDispatch.GetDispatchAsync <GetResponse <T> >(p)
                ));
 }
コード例 #2
0
ファイル: ElasticClient-Get.cs プロジェクト: GopiKand/NEST
 /// <inheritdoc />
 public IGetResponse <T> Get <T>(IGetRequest getRequest) where T : class
 {
     return(this.Dispatch <IGetRequest, GetRequestParameters, GetResponse <T> >(
                getRequest,
                (p, d) => this.RawDispatch.GetDispatch <GetResponse <T> >(p)
                ));
 }
コード例 #3
0
 /// <inheritdoc />
 public Task <IGetResponse <T> > GetAsync <T>(IGetRequest request, CancellationToken cancellationToken = default(CancellationToken))
     where T : class =>
 Dispatcher.DispatchAsync <IGetRequest, GetRequestParameters, GetResponse <T>, IGetResponse <T> >(
     request,
     cancellationToken,
     (p, d, c) => LowLevelDispatch.GetDispatchAsync <GetResponse <T> >(p, c)
     );
コード例 #4
0
        protected static async ValueTask <T> GetAsync <T>(IGetRequest request, JsonSerializerOptions options)
        {
            using var client = CreateClient();

            using var resp = await client.GetAsync(request.Host);

            var json = await JsonSerializer.DeserializeAsync <T>(await resp.Content.ReadAsStreamAsync(), options);

            return(json);
        }
コード例 #5
0
        public async Task <T> Get <T>(IGetRequest <T> method)
        {
            HttpResponseMessage response = await _client.GetAsync(_uri + method.Path);

            if (response.IsSuccessStatusCode)
            {
                using (var stream = await response.Content.ReadAsStreamAsync())
                {
                    return(method.Deserialize(stream));
                }
            }
            else
            {
                return(default(T));
            }
        }
コード例 #6
0
        public Task <Either <TFailedRequest, Response <TResponseData> > > GetAsync <TFailedRequest, TResponseData>(
            IGetRequest <TResponseData> request, Option <string> oAuthAccessToken,
            Func <string, ICustomJsonSerialiser, HttpResponseInfo, Either <TFailedRequest, Response <TResponseData> > >
            responseHandler)
        {
            var requestOptions = new HttpRequestOptions
            {
                AcceptHeader = "application/json",
                Url          = request.Url
            };

            SetToken(requestOptions, oAuthAccessToken);

            _log.Debug($"Getting: '{requestOptions.Url}'");

            var response = _httpClient.GetResponse(requestOptions);

            return(response.Map(r => ApplyResponseHandler(responseHandler, r)));
        }
コード例 #7
0
 /// <inheritdoc />
 public IGetResponse <T> Get <T>(IGetRequest request) where T : class =>
 Dispatcher.Dispatch <IGetRequest, GetRequestParameters, GetResponse <T> >(
     request,
     (p, d) => LowLevelDispatch.GetDispatch <GetResponse <T> >(p)
     );
コード例 #8
0
 public T Get <T>(IGetRequest request) where T : IResponse
 {
     return(restCaller.Get <T>(request.GetUri()));
 }
コード例 #9
0
 public override Response <T> Get <T>(IGetRequest request)
 {
     return(null);
 }
コード例 #10
0
        /// <inheritdoc cref="INetworkConnector.SendMessageAsync{TMessage}(TMessage, CancellationToken)"/>
        public async Task SendMessageAsync <TMessage>(TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
        {
            try
            {
                if (!IsRunning)
                {
                    throw new NetworkConnectorIsNotYetStartedException("NetworkConnector has not started yet. Call Start() first");
                }

                if (!(Attribute.GetCustomAttribute(message.GetType(), typeof(MessageAttribute)) is MessageAttribute messageAttribute))
                {
                    throw new InvalidMessageException("Invalid message");
                }

                HttpRequestMessage httpRequestMessage    = null;
                string             httpClientBaseAddress = _httpClient.BaseAddress + messageAttribute.Path;
                httpRequestMessage = messageAttribute.OriginalMethod switch
                {
                    "GetAll" =>
                    new HttpRequestMessage(messageAttribute.Method, httpClientBaseAddress),
                    "Get" when message is IGetRequest getRequest =>
                    new HttpRequestMessage(messageAttribute.Method, $"{httpClientBaseAddress}{getRequest.GetId}"),
                    "Get" when message is PaginationRequest paginationRequest =>
                    new HttpRequestMessage(messageAttribute.Method, $"{httpClientBaseAddress}{paginationRequest.PageNumber}/{paginationRequest.PageSize}"),
                    _ =>
                    new HttpRequestMessage(messageAttribute.Method, httpClientBaseAddress)
                    {
                        Content = new StringContent(_messageSerializer.SerializeToString(message), Encoding.UTF8, $"application/{_messageSerializer.SerializerType}")
                    }
                };

                httpRequestMessage.Headers.Add("Request-Id", message.Id.ToString());

                HttpResponseMessage response = await _httpClient.SendAsync(httpRequestMessage, cancellationToken);

                _logger.LogInformation($"REST RESPONSE: {await response.Content.ReadAsStringAsync()}");
                byte[] bytes = await response.Content.ReadAsByteArrayAsync();

                object msg = null;
                if (messageAttribute.OriginalMethod == "GetAll" || message is IPaginationRequest)
                {
                    msg = Activator.CreateInstance(messageAttribute.ResponseType);
                    PropertyInfo property = messageAttribute.ResponseType.GetProperties()
                                            .Where(p => p.PropertyType.GenericTypeArguments.Length != 0)
                                            .Where(p => p.PropertyType.GenericTypeArguments[0] != typeof(char))
                                            .Single(info => info.PropertyType.GetInterfaces().Count(c => c == typeof(IEnumerable)) == 1);
                    object e = _messageSerializer.Deserialize(bytes, property.PropertyType);
                    property.SetValue(msg, e);
                }
                else
                {
                    msg = _messageSerializer.Deserialize(bytes, !response.IsSuccessStatusCode ? typeof(RestErrorResponse) : messageAttribute.ResponseType);
                }

                switch (msg)
                {
                case IPaginationResponse paginationResponse:
                    paginationResponse.RequestId    = message.Id;
                    paginationResponse.DateTime     = DateTime.UtcNow;
                    paginationResponse.Success      = true;
                    paginationResponse.PageNumber   = GetIntegerHeaderValue("X-Paging-PageNumber");
                    paginationResponse.PageSize     = GetIntegerHeaderValue("X-Paging-PageSize");
                    paginationResponse.PageCount    = GetIntegerHeaderValue("X-Paging-PageCount");
                    paginationResponse.TotalRecords = GetIntegerHeaderValue("X-Paging-TotalRecordCount");
                    await _messageProcessor.ProcessMessageAsync(paginationResponse, this);

                    break;

                case IResponseMessage responseMessage:
                {
                    if (responseMessage.RequestId != message.Id)
                    {
                        responseMessage.RequestId = message.Id;
                        responseMessage.DateTime  = DateTime.UtcNow;
                        responseMessage.Success   = true;
                    }
                    await _messageProcessor.ProcessMessageAsync(responseMessage, this);

                    break;
                }

                default:
                {
                    ErrorResponse errorResponse = new ErrorResponse
                    {
                        Id           = Guid.NewGuid(),
                        RequestId    = message.Id,
                        RequestName  = message.GetType().FullName,
                        ResponseName = messageAttribute.ResponseType.FullName,
                        DateTime     = DateTime.UtcNow,
                        Success      = false,
                        Message      = msg is RestErrorResponse restErrorResponse
                                ? restErrorResponse.title
                                : "Unknown error."
                    };
                    await _messageProcessor.ProcessMessageAsync(errorResponse, this);

                    _logger.LogError($"REST API error: {errorResponse}");
                    break;
                }
                }

                int GetIntegerHeaderValue(string headerName) => int.Parse(response.Headers.First(header => header.Key == headerName).Value.First());
            }
            catch (Exception e)
            {
                _logger.LogError(e.Message, "The HttpNetworkConnector failed to send a message.");
            }
        }
コード例 #11
0
 public void Foo(IGetRequest r)
 {
 }
コード例 #12
0
 public Task <GetResponse <TDocument> > GetAsync <TDocument>(IGetRequest request, CancellationToken ct = new CancellationToken()) where TDocument : class
 {
     throw new NotImplementedException();
 }
コード例 #13
0
 public Task <TResponse> GetAsync <TResponse>(IGetRequest <TResponse> request)
 {
     throw new NotImplementedException();
 }
コード例 #14
0
ファイル: API.cs プロジェクト: karamanolev/WhatAPI
        // Requests
        /// <summary>
        /// Known issue - MusicInfo object sometimes returning as an empty array: https://what.cd/forums.php?action=viewthread&threadid=169790
        /// </summary>
        /// <param name="options">Object that inherits IGetRequest</param>
        /// <returns>Request object</returns>
        public Request GetRequest(IGetRequest options)
        {
            StringBuilder Query = new StringBuilder();
            Query.Append("ajax.php?action=request");
            Query.Append(string.Format("&id={0}", options.RequestID));
            if (options.CommentPage != null && options.CommentPage > 0) Query.Append(string.Format("&page={0}", options.CommentPage));

            string Json = RequestJson(this.RootWhatCDURI, Query.ToString());
            return JsonConvert.DeserializeObject<Request>(Json);
        }
コード例 #15
0
 /// <inheritdoc/>
 public IGetResponse <T> Get <T>(IGetRequest request) where T : class =>
 this.Dispatcher.Dispatch <IGetRequest, GetRequestParameters, GetResponse <T> >(
     request,
     (r, s) => DeserializeGetResponse <T>(s),
     (p, d) => this.LowLevelDispatch.GetDispatch <GetResponse <T> >(p)
     );
コード例 #16
0
 /// <inheritdoc />
 public GetResponse <TDocument> Get <TDocument>(IGetRequest request) where TDocument : class =>
 DoRequest <IGetRequest, GetResponse <TDocument> >(request, request.RequestParameters);
コード例 #17
0
 /// <inheritdoc />
 public Task <GetResponse <TDocument> > GetAsync <TDocument>(IGetRequest request, CancellationToken ct = default)
     where TDocument : class =>
 DoRequestAsync <IGetRequest, GetResponse <TDocument> >(request, request.RequestParameters, ct);
コード例 #18
0
        protected static async ValueTask <TResult> GetAsync <TResult, TEncodedResponse>(IGetRequest request, JsonSerializerOptions options) where TEncodedResponse : IEncodedResponse
        {
            using var client = CreateClient();

            using var resp = await client.GetAsync(request.Host);

            var content = await resp.Content.ReadAsStringAsync();

            var json = await JsonSerializer.DeserializeAsync <TEncodedResponse>(await resp.Content.ReadAsStreamAsync(), IEncodedResponse.Options);

            var result = JsonSerializer.Deserialize <TResult>(json.Decode(), options);

            return(result);
        }
コード例 #19
0
 public async Task <T> GetAsync <T>(IGetRequest request) where T : IResponse
 {
     return(await restCaller.GetAsync <T>(request.GetUri()));
 }
コード例 #20
0
 public static void Update(ElasticsearchPathInfo <GetRequestParameters> pathInfo, IGetRequest request)
 {
     pathInfo.HttpMethod = PathInfoHttpMethod.GET;
 }
コード例 #21
0
        private static Monad.Reader <Environment, Task <ApiResult <TResponse> > > Get <TResponse>(IGetRequest request, string route, IOption <AccessToken> token)
        {
            return(env =>
            {
                var queryString = request.ToQueryString().ToString();
                var baseUri = env.HttpClient.BaseAddress;
                var uriBuilder = new UriBuilder(baseUri)
                {
                    Query = queryString,
                    Path = route
                };
                var endpoint = uriBuilder.Uri;
                token.Match(t => env.HttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(t.Value));

                var response = env.HttpClient.GetAsync(endpoint.PathAndQuery);
                return response.Bind(r =>
                {
                    var responseContent = r.Content.ReadAsStringAsync();
                    return responseContent.Map(c => r.IsSuccessStatusCode
                        ? Success(JsonConvert.DeserializeObject <TResponse>(c))
                        : Error <TResponse>(JsonConvert.DeserializeObject <ApiError>(c))
                                               );
                });
            });
        }
コード例 #22
0
 public void Get(IGetRequest r)
 {
 }
コード例 #23
0
 public Task <Either <FailedRequest, Response <TResponseData> > > GetAsync <TResponseData>(
     IGetRequest <TResponseData> request, Option <string> oAuthAccessToken)
 {
     return(GetAsync(request, oAuthAccessToken, ParseResponse <TResponseData>));
 }
コード例 #24
0
 public GetResponse <TDocument> Get <TDocument>(IGetRequest request) where TDocument : class
 {
     throw new NotImplementedException();
 }
コード例 #25
0
 /// <inheritdoc/>
 public Task <IGetResponse <T> > GetAsync <T>(IGetRequest request) where T : class =>
 this.Dispatcher.DispatchAsync <IGetRequest, GetRequestParameters, GetResponse <T>, IGetResponse <T> >(
     request,
     (p, d) => this.LowLevelDispatch.GetDispatchAsync <GetResponse <T> >(p)
     );
コード例 #26
0
ファイル: API.cs プロジェクト: frankston/WhatAPI
 // Requests
 /// <summary>
 /// Gets information about a specific request.
 /// </summary>
 /// <param name="options">Object that inherits IGetRequest</param>
 /// <returns>JSON response deserialized into Request object</returns>
 public WhatCD.Model.ActionRequest.Request GetRequest(IGetRequest options)
 {
     var builder = new QueryBuilder("ajax.php?action=request");
     builder.Append("id", options.RequestID);
     builder.Append("page", options.Page);
     var json = _http.RequestJson(this.RootWhatCDUri, builder.Query.ToString());
     return JsonConvert.DeserializeObject<WhatCD.Model.ActionRequest.Request>(json, JsonSettings);
 }
コード例 #27
0
 public RequestAdapter(IGetRequest getRequest)
 {
     this.getRequest = getRequest;
 }