コード例 #1
0
        public async Task <IApiResponse <IEnumerable <ReturnType> > > ExecuteCsvAsync <ReturnType>(
            string urlPattern, NameValueCollection nvc, QueryStringBuilder qsb, CancellationToken cancellationToken)
            where ReturnType : class
        {
            HttpStateModel state = null;

            try
            {
                ReplaceUrlPatterns(ref urlPattern, ref nvc);

                var url = $"{urlPattern}{qsb.Build()}";

                state = await ExecuteInternalAsync(url, cancellationToken);

                cancellationToken.ThrowIfCancellationRequested();

                if (state.Error)
                {
                    return(ApiResponse.FromError <IEnumerable <ReturnType> >(state.Meta, state.Response));
                }

                using (var reader = new CsvReader(new StringReader(state.Response), CultureInfo.InvariantCulture))
                {
                    var typeConverterOptions = new TypeConverterOptions();
                    typeConverterOptions.NullValues.Add("null");

                    reader.Configuration.TypeConverterCache.AddConverter <Instant>(new NodaTimeCsvConverter());
                    reader.Configuration.TypeConverterCache.AddConverter <SplitData>(new SplitCsvConverter());
                    reader.Configuration.TypeConverterCache.AddConverter <decimal>(new DecimalCsvConverter());
                    reader.Configuration.TypeConverterCache.AddConverter <int>(new IntCsvConverter());

                    cancellationToken.ThrowIfCancellationRequested();

                    var records = reader.GetRecords <ReturnType>().ToList().AsEnumerable();

                    cancellationToken.ThrowIfCancellationRequested();
                    logger.LogDebug("Correctly deserialized response");

                    return(ApiResponse.FromSucces(state.Meta, records));
                }
            }
            catch (OperationCanceledException tce)
            {
                logger.LogInformation("Task cancelled");
                return(await Task.FromCanceled <IApiResponse <IEnumerable <ReturnType> > >(cancellationToken));
            }
            catch (Exception ex)
            {
                return(ApiResponse.FromError <IEnumerable <ReturnType> >(state?.Meta ?? new ErrorHttpMetadata(), ex.ToString()));
            }
        }
コード例 #2
0
        public async Task <IApiResponse <ReturnType> > ExecuteJsonAsync <ReturnType>(
            string urlPattern, QueryStringBuilder qsb, CancellationToken cancellationToken)
            where ReturnType : class
        {
            var url = $"{urlPattern}{qsb.Build()}";

            HttpStateModel state = null;

            try
            {
                state = await ExecuteInternalAsync(url, cancellationToken);

                if (state.Error)
                {
                    return(ApiResponse.FromError <ReturnType>(state.Meta, state.Response));
                }

                cancellationToken.ThrowIfCancellationRequested();

                var data = JsonConvert.DeserializeObject <ReturnType>(state.Response, jsonSerializerSettings);

                cancellationToken.ThrowIfCancellationRequested();

                logger.LogDebug("Correctly deserialized response");

                return(ApiResponse.FromSucces(state.Meta, data));
            }
            catch (OperationCanceledException tce)
            {
                logger.LogInformation("Task cancelled");
                return(await Task.FromCanceled <IApiResponse <ReturnType> >(cancellationToken));
            }
            catch (Exception ex)
            {
                return(ApiResponse.FromError <ReturnType>(state.Meta, ex.ToString()));
            }
        }