11using System ;
2+ using System . IO ;
23using System . Net . Http ;
34using System . Net . Http . Headers ;
45using System . Text ;
56using System . Threading . Tasks ;
7+ using GraphQL . Client . Exceptions ;
68using GraphQL . Common . Request ;
79using GraphQL . Common . Response ;
810using Newtonsoft . Json ;
@@ -116,8 +118,9 @@ public async Task<GraphQLResponse> GetAsync(GraphQLRequest request) {
116118 var queryParamsBuilder = new StringBuilder ( $ "query={ request . Query } ", 3 ) ;
117119 if ( request . OperationName != null ) { queryParamsBuilder . Append ( $ "&operationName={ request . OperationName } ") ; }
118120 if ( request . Variables != null ) { queryParamsBuilder . Append ( $ "&variables={ JsonConvert . SerializeObject ( request . Variables ) } ") ; }
119- var httpResponseMessage = await this . httpClient . GetAsync ( $ "{ this . Options . EndPoint } ?{ queryParamsBuilder . ToString ( ) } ") . ConfigureAwait ( false ) ;
120- return await this . ReadHttpResponseMessageAsync ( httpResponseMessage ) . ConfigureAwait ( false ) ;
121+ using ( var httpResponseMessage = await this . httpClient . GetAsync ( $ "{ this . Options . EndPoint } ?{ queryParamsBuilder . ToString ( ) } ") . ConfigureAwait ( false ) ) {
122+ return await this . ReadHttpResponseMessageAsync ( httpResponseMessage ) . ConfigureAwait ( false ) ;
123+ }
121124 }
122125
123126 /// <summary>
@@ -141,9 +144,10 @@ public async Task<GraphQLResponse> PostAsync(GraphQLRequest request) {
141144 if ( request . Query == null ) { throw new ArgumentNullException ( nameof ( request . Query ) ) ; }
142145
143146 var graphQLString = JsonConvert . SerializeObject ( request , this . Options . JsonSerializerSettings ) ;
144- var httpContent = new StringContent ( graphQLString , Encoding . UTF8 , this . Options . MediaType . MediaType ) ;
145- var httpResponseMessage = await this . httpClient . PostAsync ( this . EndPoint , httpContent ) . ConfigureAwait ( false ) ;
146- return await this . ReadHttpResponseMessageAsync ( httpResponseMessage ) . ConfigureAwait ( false ) ;
147+ using ( var httpContent = new StringContent ( graphQLString , Encoding . UTF8 , this . Options . MediaType . MediaType ) )
148+ using ( var httpResponseMessage = await this . httpClient . PostAsync ( this . EndPoint , httpContent ) . ConfigureAwait ( false ) ) {
149+ return await this . ReadHttpResponseMessageAsync ( httpResponseMessage ) . ConfigureAwait ( false ) ;
150+ }
147151 }
148152
149153 /// <summary>
@@ -158,8 +162,22 @@ public void Dispose() =>
158162 /// <param name="httpResponseMessage">The Response</param>
159163 /// <returns>The GrahQLResponse</returns>
160164 private async Task < GraphQLResponse > ReadHttpResponseMessageAsync ( HttpResponseMessage httpResponseMessage ) {
161- var resultString = await httpResponseMessage . Content . ReadAsStringAsync ( ) . ConfigureAwait ( false ) ;
162- return JsonConvert . DeserializeObject < GraphQLResponse > ( resultString , this . Options . JsonSerializerSettings ) ;
165+ using ( var stream = await httpResponseMessage . Content . ReadAsStreamAsync ( ) . ConfigureAwait ( false ) )
166+ using ( var streamReader = new StreamReader ( stream ) )
167+ using ( var jsonTextReader = new JsonTextReader ( streamReader ) ) {
168+ var jsonSerializer = new JsonSerializer {
169+ ContractResolver = this . Options . JsonSerializerSettings . ContractResolver
170+ } ;
171+ try {
172+ return jsonSerializer . Deserialize < GraphQLResponse > ( jsonTextReader ) ;
173+ }
174+ catch ( JsonReaderException exception ) {
175+ if ( httpResponseMessage . IsSuccessStatusCode ) {
176+ throw exception ;
177+ }
178+ throw new GraphQLHttpException ( httpResponseMessage ) ;
179+ }
180+ }
163181 }
164182
165183 }
0 commit comments