1
1
using System ;
2
2
using System . Collections . Generic ;
3
+ using System . Net ;
3
4
using System . Net . Http ;
4
5
using System . Net . Http . Headers ;
5
6
using System . Threading . Tasks ;
@@ -245,11 +246,12 @@ public void SendNotification(PushSubscription subscription, string payload = nul
245
246
Dictionary < string , object > options = null )
246
247
{
247
248
var request = GenerateRequestDetails ( subscription , payload , options ) ;
248
- var response = HttpClient . SendAsync ( request ) ;
249
- response . Wait ( ) ;
249
+ var sendAsyncTask = HttpClient . SendAsync ( request ) ;
250
+ sendAsyncTask . Wait ( ) ;
250
251
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 ) ;
253
255
}
254
256
255
257
/// <summary>
@@ -296,8 +298,7 @@ public async Task SendNotificationAsync(PushSubscription subscription, string pa
296
298
var request = GenerateRequestDetails ( subscription , payload , options ) ;
297
299
var response = await HttpClient . SendAsync ( request ) ;
298
300
299
- throw new WebPushException ( @"Received unexpected response code" , response . StatusCode , response . Headers ,
300
- subscription ) ;
301
+ HandleResponse ( response , subscription ) ;
301
302
}
302
303
303
304
/// <summary>
@@ -328,5 +329,43 @@ public async Task SendNotificationAsync(PushSubscription subscription, string pa
328
329
options [ "gcmAPIKey" ] = gcmApiKey ;
329
330
await SendNotificationAsync ( subscription , payload , options ) ;
330
331
}
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
+ }
331
370
}
332
371
}
0 commit comments