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())); } }
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())); } }