11using System ;
22using System . Collections . Generic ;
3+ using System . Net ;
34using System . Net . Http ;
45using System . Net . Http . Headers ;
56using System . Threading . Tasks ;
@@ -245,11 +246,12 @@ public void SendNotification(PushSubscription subscription, string payload = nul
245246 Dictionary < string , object > options = null )
246247 {
247248 var request = GenerateRequestDetails ( subscription , payload , options ) ;
248- var response = HttpClient . SendAsync ( request ) ;
249- response . Wait ( ) ;
249+ var sendAsyncTask = HttpClient . SendAsync ( request ) ;
250+ sendAsyncTask . Wait ( ) ;
250251
251- throw new WebPushException ( @"Received unexpected response code" , response . Result . StatusCode ,
252- response . Result . Headers , subscription ) ;
252+ var response = sendAsyncTask . Result ;
253+
254+ HandleResponse ( response , subscription ) ;
253255 }
254256
255257 /// <summary>
@@ -296,8 +298,7 @@ public async Task SendNotificationAsync(PushSubscription subscription, string pa
296298 var request = GenerateRequestDetails ( subscription , payload , options ) ;
297299 var response = await HttpClient . SendAsync ( request ) ;
298300
299- throw new WebPushException ( @"Received unexpected response code" , response . StatusCode , response . Headers ,
300- subscription ) ;
301+ HandleResponse ( response , subscription ) ;
301302 }
302303
303304 /// <summary>
@@ -328,5 +329,43 @@ public async Task SendNotificationAsync(PushSubscription subscription, string pa
328329 options [ "gcmAPIKey" ] = gcmApiKey ;
329330 await SendNotificationAsync ( subscription , payload , options ) ;
330331 }
332+
333+ /// <summary>
334+ /// Handle Web Push responses.
335+ /// </summary>
336+ /// <param name="response"></param>
337+ /// <param name="subscription"></param>
338+ private static void HandleResponse ( HttpResponseMessage response , PushSubscription subscription )
339+ {
340+ // Successful
341+ if ( response . StatusCode == HttpStatusCode . Created )
342+ {
343+ return ;
344+ }
345+
346+ // Error
347+ var message = @"Received unexpected response code: " + ( int ) response . StatusCode ;
348+ switch ( response . StatusCode )
349+ {
350+ case HttpStatusCode . BadRequest :
351+ message = "Bad Request" ;
352+ break ;
353+
354+ case HttpStatusCode . RequestEntityTooLarge :
355+ message = "Payload too large" ;
356+ break ;
357+
358+ case ( HttpStatusCode ) 429 :
359+ message = "Too many request." ;
360+ break ;
361+
362+ case HttpStatusCode . NotFound :
363+ case HttpStatusCode . Gone :
364+ message = "Subscription no longer valid" ;
365+ break ;
366+ }
367+
368+ throw new WebPushException ( message , response . StatusCode , response . Headers , subscription ) ;
369+ }
331370 }
332371}
0 commit comments